From c37ebf799821b324ded5efc18f4bba130a210c63 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 27 Mar 2026 23:36:39 +0000 Subject: [PATCH 01/11] Weak-memory examples: selectively use thread-local variables We cannot soundly handle pointer offsets that are shared across threads, and will reject this in future to avoid unsound verification results. Here, however, the pointer offsets are not actually shared, so we can safely mark them `__CPROVER_thread_local`. --- .../ppc_aclwsrr000_PSO_ALL/aclwsrr000.c | 2 +- .../ppc_aclwsrr000_PSO_OPC/aclwsrr000.c | 2 +- .../ppc_aclwsrr000_RMO_ALL/aclwsrr000.c | 2 +- .../ppc_aclwsrr000_RMO_OPC/aclwsrr000.c | 2 +- .../ppc_aclwsrr000_TSO_ALL/aclwsrr000.c | 2 +- .../ppc_aclwsrr000_TSO_OPC/aclwsrr000.c | 2 +- .../ppc_aclwsrr002_POWER_ALL/aclwsrr002.c | 2 +- .../ppc_aclwsrr002_POWER_OPC/aclwsrr002.c | 2 +- .../ppc_aclwsrr002_PSO_ALL/aclwsrr002.c | 2 +- .../ppc_aclwsrr002_PSO_OPC/aclwsrr002.c | 2 +- .../ppc_aclwsrr002_RMO_ALL/aclwsrr002.c | 2 +- .../ppc_aclwsrr002_RMO_OPC/aclwsrr002.c | 2 +- .../ppc_aclwsrr002_TSO_ALL/aclwsrr002.c | 2 +- .../ppc_aclwsrr002_TSO_OPC/aclwsrr002.c | 2 +- .../ppc_bclwdww000_PSO_ALL/bclwdww000.c | 2 +- .../ppc_bclwdww000_PSO_OPC/bclwdww000.c | 2 +- .../ppc_bclwdww000_RMO_ALL/bclwdww000.c | 2 +- .../ppc_bclwdww000_RMO_OPC/bclwdww000.c | 2 +- .../ppc_bclwdww000_TSO_ALL/bclwdww000.c | 2 +- .../ppc_bclwdww000_TSO_OPC/bclwdww000.c | 2 +- .../ppc_bclwdww001_PSO_ALL/bclwdww001.c | 2 +- .../ppc_bclwdww001_PSO_OPC/bclwdww001.c | 2 +- .../ppc_bclwdww001_TSO_ALL/bclwdww001.c | 2 +- .../ppc_bclwdww001_TSO_OPC/bclwdww001.c | 2 +- .../ppc_bclwdww003_PSO_ALL/bclwdww003.c | 2 +- .../ppc_bclwdww003_PSO_OPC/bclwdww003.c | 2 +- .../ppc_bclwdww003_RMO_ALL/bclwdww003.c | 2 +- .../ppc_bclwdww003_RMO_OPC/bclwdww003.c | 2 +- .../ppc_bclwdww003_TSO_ALL/bclwdww003.c | 2 +- .../ppc_bclwdww003_TSO_OPC/bclwdww003.c | 2 +- .../ppc_bclwdww004_PSO_ALL/bclwdww004.c | 2 +- .../ppc_bclwdww004_PSO_OPC/bclwdww004.c | 2 +- .../ppc_bclwdww004_RMO_ALL/bclwdww004.c | 2 +- .../ppc_bclwdww004_RMO_OPC/bclwdww004.c | 2 +- .../ppc_bclwdww004_TSO_ALL/bclwdww004.c | 2 +- .../ppc_bclwdww004_TSO_OPC/bclwdww004.c | 2 +- .../ppc_bclwsww000_POWER_ALL/bclwsww000.c | 4 ++-- .../ppc_bclwsww000_POWER_OPC/bclwsww000.c | 4 ++-- .../ppc_bclwsww000_PSO_ALL/bclwsww000.c | 4 ++-- .../ppc_bclwsww000_PSO_OPC/bclwsww000.c | 4 ++-- .../ppc_bclwsww000_RMO_ALL/bclwsww000.c | 4 ++-- .../ppc_bclwsww000_RMO_OPC/bclwsww000.c | 4 ++-- .../ppc_bclwsww000_TSO_ALL/bclwsww000.c | 4 ++-- .../ppc_bclwsww000_TSO_OPC/bclwsww000.c | 4 ++-- .../ppc_iriw+addrs_PSO_ALL/iriw+addrs.c | 4 ++-- .../ppc_iriw+addrs_PSO_OPC/iriw+addrs.c | 4 ++-- .../ppc_iriw+addrs_RMO_ALL/iriw+addrs.c | 4 ++-- .../ppc_iriw+addrs_RMO_OPC/iriw+addrs.c | 4 ++-- .../ppc_iriw+addrs_TSO_ALL/iriw+addrs.c | 4 ++-- .../ppc_iriw+addrs_TSO_OPC/iriw+addrs.c | 4 ++-- .../ppc_iriw+lwsync+addr_PSO_ALL/iriw+lwsync+addr.c | 2 +- .../ppc_iriw+lwsync+addr_PSO_OPC/iriw+lwsync+addr.c | 2 +- .../ppc_iriw+lwsync+addr_RMO_ALL/iriw+lwsync+addr.c | 2 +- .../ppc_iriw+lwsync+addr_RMO_OPC/iriw+lwsync+addr.c | 2 +- .../ppc_iriw+lwsync+addr_TSO_ALL/iriw+lwsync+addr.c | 2 +- .../ppc_iriw+lwsync+addr_TSO_OPC/iriw+lwsync+addr.c | 2 +- .../ppc_lwswr000_POWER_ALL/lwswr000.c | 4 ++-- .../ppc_lwswr000_POWER_OPC/lwswr000.c | 4 ++-- .../ppc_lwswr001_POWER_ALL/lwswr001.c | 4 ++-- .../ppc_lwswr001_POWER_OPC/lwswr001.c | 4 ++-- .../ppc_lwswr001_PSO_OPC/lwswr001.c | 4 ++-- .../ppc_lwswr001_RMO_OPC/lwswr001.c | 4 ++-- .../ppc_lwswr001_TSO_OPC/lwswr001.c | 4 ++-- .../ppc_lwswr002_POWER_ALL/lwswr002.c | 4 ++-- .../ppc_lwswr002_POWER_OPC/lwswr002.c | 4 ++-- .../ppc_lwswr002_PSO_ALL/lwswr002.c | 4 ++-- .../ppc_lwswr002_PSO_OPC/lwswr002.c | 4 ++-- .../ppc_lwswr002_RMO_ALL/lwswr002.c | 4 ++-- .../ppc_lwswr002_RMO_OPC/lwswr002.c | 4 ++-- .../ppc_lwswr002_TSO_ALL/lwswr002.c | 4 ++-- .../ppc_lwswr002_TSO_OPC/lwswr002.c | 4 ++-- .../ppc_lwswr003_POWER_ALL/lwswr003.c | 6 +++--- .../ppc_lwswr003_POWER_OPC/lwswr003.c | 6 +++--- .../ppc_lwswr003_PSO_ALL/lwswr003.c | 6 +++--- .../ppc_lwswr003_PSO_OPC/lwswr003.c | 6 +++--- .../ppc_lwswr003_RMO_ALL/lwswr003.c | 6 +++--- .../ppc_lwswr003_RMO_OPC/lwswr003.c | 6 +++--- .../ppc_lwswr003_TSO_ALL/lwswr003.c | 6 +++--- .../ppc_lwswr003_TSO_OPC/lwswr003.c | 6 +++--- .../ppc_mix000_PSO_ALL/mix000.c | 2 +- .../ppc_mix000_PSO_OPC/mix000.c | 2 +- .../ppc_mix000_RMO_ALL/mix000.c | 2 +- .../ppc_mix000_TSO_ALL/mix000.c | 2 +- .../ppc_mix000_TSO_OPC/mix000.c | 2 +- .../ppc_podrwposwr000_PSO_ALL/podrwposwr000.c | 2 +- .../ppc_podrwposwr000_PSO_OPC/podrwposwr000.c | 2 +- .../ppc_podrwposwr000_TSO_ALL/podrwposwr000.c | 2 +- .../ppc_podrwposwr000_TSO_OPC/podrwposwr000.c | 2 +- .../ppc_podrwposwr001_PSO_ALL/podrwposwr001.c | 2 +- .../ppc_podrwposwr001_PSO_OPC/podrwposwr001.c | 2 +- .../ppc_podrwposwr001_TSO_ALL/podrwposwr001.c | 2 +- .../ppc_podrwposwr001_TSO_OPC/podrwposwr001.c | 2 +- .../ppc_podrwposwr002_PSO_ALL/podrwposwr002.c | 2 +- .../ppc_podrwposwr002_PSO_OPC/podrwposwr002.c | 2 +- .../ppc_podrwposwr002_TSO_ALL/podrwposwr002.c | 2 +- .../ppc_podrwposwr002_TSO_OPC/podrwposwr002.c | 2 +- .../ppc_podrwposwr003_PSO_ALL/podrwposwr003.c | 2 +- .../ppc_podrwposwr003_PSO_OPC/podrwposwr003.c | 2 +- .../ppc_podrwposwr003_TSO_ALL/podrwposwr003.c | 2 +- .../ppc_podrwposwr003_TSO_OPC/podrwposwr003.c | 2 +- .../ppc_podrwposwr005_PSO_ALL/podrwposwr005.c | 2 +- .../ppc_podrwposwr005_PSO_OPC/podrwposwr005.c | 2 +- .../ppc_podrwposwr005_TSO_ALL/podrwposwr005.c | 2 +- .../ppc_podrwposwr005_TSO_OPC/podrwposwr005.c | 2 +- .../ppc_podrwposwr007_PSO_ALL/podrwposwr007.c | 2 +- .../ppc_podrwposwr007_PSO_OPC/podrwposwr007.c | 2 +- .../ppc_podrwposwr007_TSO_ALL/podrwposwr007.c | 2 +- .../ppc_podrwposwr007_TSO_OPC/podrwposwr007.c | 2 +- .../ppc_podrwposwr008_PSO_ALL/podrwposwr008.c | 2 +- .../ppc_podrwposwr008_PSO_OPC/podrwposwr008.c | 2 +- .../ppc_podrwposwr008_TSO_ALL/podrwposwr008.c | 2 +- .../ppc_podrwposwr008_TSO_OPC/podrwposwr008.c | 2 +- .../ppc_podrwposwr009_PSO_ALL/podrwposwr009.c | 2 +- .../ppc_podrwposwr009_PSO_OPC/podrwposwr009.c | 2 +- .../ppc_podrwposwr009_TSO_ALL/podrwposwr009.c | 2 +- .../ppc_podrwposwr009_TSO_OPC/podrwposwr009.c | 2 +- .../ppc_podrwposwr011_PSO_ALL/podrwposwr011.c | 2 +- .../ppc_podrwposwr011_PSO_OPC/podrwposwr011.c | 2 +- .../ppc_podrwposwr011_TSO_ALL/podrwposwr011.c | 2 +- .../ppc_podrwposwr011_TSO_OPC/podrwposwr011.c | 2 +- .../ppc_podrwposwr012_PSO_ALL/podrwposwr012.c | 2 +- .../ppc_podrwposwr012_PSO_OPC/podrwposwr012.c | 2 +- .../ppc_podrwposwr012_TSO_ALL/podrwposwr012.c | 2 +- .../ppc_podrwposwr012_TSO_OPC/podrwposwr012.c | 2 +- .../ppc_podrwposwr014_PSO_ALL/podrwposwr014.c | 2 +- .../ppc_podrwposwr014_PSO_OPC/podrwposwr014.c | 2 +- .../ppc_podrwposwr014_TSO_ALL/podrwposwr014.c | 2 +- .../ppc_podrwposwr014_TSO_OPC/podrwposwr014.c | 2 +- .../ppc_podrwposwr015_PSO_ALL/podrwposwr015.c | 2 +- .../ppc_podrwposwr015_PSO_OPC/podrwposwr015.c | 2 +- .../ppc_podrwposwr015_TSO_ALL/podrwposwr015.c | 2 +- .../ppc_podrwposwr015_TSO_OPC/podrwposwr015.c | 2 +- .../ppc_posrr000_PSO_ALL/posrr000.c | 2 +- .../ppc_posrr000_PSO_OPC/posrr000.c | 2 +- .../ppc_posrr000_TSO_ALL/posrr000.c | 2 +- .../ppc_posrr000_TSO_OPC/posrr000.c | 2 +- .../ppc_posrr001_PSO_ALL/posrr001.c | 2 +- .../ppc_posrr001_PSO_OPC/posrr001.c | 2 +- .../ppc_posrr001_TSO_ALL/posrr001.c | 2 +- .../ppc_posrr001_TSO_OPC/posrr001.c | 2 +- .../ppc_posrr002_PSO_ALL/posrr002.c | 4 ++-- .../ppc_posrr002_PSO_OPC/posrr002.c | 4 ++-- .../ppc_posrr002_TSO_ALL/posrr002.c | 4 ++-- .../ppc_posrr002_TSO_OPC/posrr002.c | 4 ++-- .../ppc_posrr003_PSO_ALL/posrr003.c | 2 +- .../ppc_posrr003_PSO_OPC/posrr003.c | 2 +- .../ppc_posrr003_TSO_ALL/posrr003.c | 2 +- .../ppc_posrr003_TSO_OPC/posrr003.c | 2 +- .../ppc_rfe000_PSO_ALL/rfe000.c | 4 ++-- .../ppc_rfe000_PSO_OPC/rfe000.c | 4 ++-- .../ppc_rfe000_TSO_ALL/rfe000.c | 4 ++-- .../ppc_rfe000_TSO_OPC/rfe000.c | 4 ++-- .../ppc_rfe001_PSO_ALL/rfe001.c | 6 +++--- .../ppc_rfe001_PSO_OPC/rfe001.c | 6 +++--- .../ppc_rfe001_TSO_ALL/rfe001.c | 6 +++--- .../ppc_rfe001_TSO_OPC/rfe001.c | 6 +++--- .../ppc_rfe002_PSO_ALL/rfe002.c | 4 ++-- .../ppc_rfe002_PSO_OPC/rfe002.c | 4 ++-- .../ppc_rfe002_TSO_ALL/rfe002.c | 4 ++-- .../ppc_rfe002_TSO_OPC/rfe002.c | 4 ++-- .../ppc_rfe003_PSO_ALL/rfe003.c | 4 ++-- .../ppc_rfe003_PSO_OPC/rfe003.c | 4 ++-- .../ppc_rfe003_RMO_ALL/rfe003.c | 2 +- .../ppc_rfe003_RMO_OPC/rfe003.c | 2 +- .../ppc_rfe003_TSO_ALL/rfe003.c | 4 ++-- .../ppc_rfe003_TSO_OPC/rfe003.c | 4 ++-- .../ppc_rfe004_PSO_ALL/rfe004.c | 4 ++-- .../ppc_rfe004_PSO_OPC/rfe004.c | 4 ++-- .../ppc_rfe004_TSO_ALL/rfe004.c | 4 ++-- .../ppc_rfe004_TSO_OPC/rfe004.c | 4 ++-- .../ppc_rfe005_PSO_ALL/rfe005.c | 4 ++-- .../ppc_rfe005_PSO_OPC/rfe005.c | 4 ++-- .../ppc_rfe005_RMO_ALL/rfe005.c | 2 +- .../ppc_rfe005_RMO_OPC/rfe005.c | 2 +- .../ppc_rfe005_TSO_ALL/rfe005.c | 4 ++-- .../ppc_rfe005_TSO_OPC/rfe005.c | 4 ++-- .../ppc_rfe006_PSO_ALL/rfe006.c | 4 ++-- .../ppc_rfe006_PSO_OPC/rfe006.c | 4 ++-- .../ppc_rfe006_RMO_ALL/rfe006.c | 4 ++-- .../ppc_rfe006_RMO_OPC/rfe006.c | 4 ++-- .../ppc_rfe006_TSO_ALL/rfe006.c | 4 ++-- .../ppc_rfe006_TSO_OPC/rfe006.c | 4 ++-- .../ppc_rfi000_POWER_ALL/rfi000.c | 4 ++-- .../ppc_rfi000_POWER_OPC/rfi000.c | 4 ++-- .../ppc_rfi000_PSO_ALL/rfi000.c | 4 ++-- .../ppc_rfi000_PSO_OPC/rfi000.c | 4 ++-- .../ppc_rfi000_RMO_ALL/rfi000.c | 4 ++-- .../ppc_rfi000_RMO_OPC/rfi000.c | 4 ++-- .../ppc_rfi000_TSO_ALL/rfi000.c | 4 ++-- .../ppc_rfi000_TSO_OPC/rfi000.c | 4 ++-- .../ppc_rfi001_POWER_ALL/rfi001.c | 2 +- .../ppc_rfi001_POWER_OPC/rfi001.c | 2 +- .../ppc_rfi001_PSO_ALL/rfi001.c | 2 +- .../ppc_rfi001_PSO_OPC/rfi001.c | 2 +- .../ppc_rfi001_RMO_ALL/rfi001.c | 2 +- .../ppc_rfi001_RMO_OPC/rfi001.c | 2 +- .../ppc_rfi001_TSO_ALL/rfi001.c | 2 +- .../ppc_rfi001_TSO_OPC/rfi001.c | 2 +- .../ppc_rfi002_TSO_ALL/rfi002.c | 4 ++-- .../ppc_rfi002_TSO_OPC/rfi002.c | 4 ++-- .../ppc_safe000_PSO_ALL/safe000.c | 2 +- .../ppc_safe000_PSO_OPC/safe000.c | 2 +- .../ppc_safe000_TSO_ALL/safe000.c | 2 +- .../ppc_safe000_TSO_OPC/safe000.c | 2 +- .../ppc_safe001_PSO_ALL/safe001.c | 2 +- .../ppc_safe001_PSO_OPC/safe001.c | 2 +- .../ppc_safe001_TSO_ALL/safe001.c | 2 +- .../ppc_safe001_TSO_OPC/safe001.c | 2 +- .../ppc_safe002_PSO_ALL/safe002.c | 2 +- .../ppc_safe002_PSO_OPC/safe002.c | 2 +- .../ppc_safe002_TSO_ALL/safe002.c | 2 +- .../ppc_safe002_TSO_OPC/safe002.c | 2 +- .../ppc_safe003_PSO_ALL/safe003.c | 2 +- .../ppc_safe003_PSO_OPC/safe003.c | 2 +- .../ppc_safe003_RMO_ALL/safe003.c | 2 +- .../ppc_safe003_RMO_OPC/safe003.c | 2 +- .../ppc_safe003_TSO_ALL/safe003.c | 2 +- .../ppc_safe003_TSO_OPC/safe003.c | 2 +- .../ppc_safe004_PSO_ALL/safe004.c | 2 +- .../ppc_safe004_PSO_OPC/safe004.c | 2 +- .../ppc_safe004_RMO_ALL/safe004.c | 2 +- .../ppc_safe004_RMO_OPC/safe004.c | 2 +- .../ppc_safe004_TSO_ALL/safe004.c | 2 +- .../ppc_safe004_TSO_OPC/safe004.c | 2 +- .../ppc_safe005_PSO_ALL/safe005.c | 2 +- .../ppc_safe005_PSO_OPC/safe005.c | 2 +- .../ppc_safe005_RMO_ALL/safe005.c | 2 +- .../ppc_safe005_RMO_OPC/safe005.c | 2 +- .../ppc_safe005_TSO_ALL/safe005.c | 2 +- .../ppc_safe005_TSO_OPC/safe005.c | 2 +- .../ppc_safe006_PSO_ALL/safe006.c | 2 +- .../ppc_safe006_PSO_OPC/safe006.c | 2 +- .../ppc_safe006_RMO_ALL/safe006.c | 2 +- .../ppc_safe006_RMO_OPC/safe006.c | 2 +- .../ppc_safe006_TSO_ALL/safe006.c | 2 +- .../ppc_safe006_TSO_OPC/safe006.c | 2 +- .../ppc_safe018_POWER_ALL/safe018.c | 2 +- .../ppc_safe018_POWER_OPC/safe018.c | 2 +- .../ppc_safe018_PSO_ALL/safe018.c | 2 +- .../ppc_safe018_PSO_OPC/safe018.c | 2 +- .../ppc_safe018_RMO_ALL/safe018.c | 2 +- .../ppc_safe018_RMO_OPC/safe018.c | 2 +- .../ppc_safe018_TSO_ALL/safe018.c | 2 +- .../ppc_safe018_TSO_OPC/safe018.c | 2 +- .../ppc_safe019_POWER_ALL/safe019.c | 2 +- .../ppc_safe019_POWER_OPC/safe019.c | 2 +- .../ppc_safe019_PSO_ALL/safe019.c | 2 +- .../ppc_safe019_PSO_OPC/safe019.c | 2 +- .../ppc_safe019_RMO_ALL/safe019.c | 2 +- .../ppc_safe019_RMO_OPC/safe019.c | 2 +- .../ppc_safe019_TSO_ALL/safe019.c | 2 +- .../ppc_safe019_TSO_OPC/safe019.c | 2 +- .../ppc_safe043_POWER_ALL/safe043.c | 2 +- .../ppc_safe043_POWER_OPC/safe043.c | 2 +- .../ppc_safe043_PSO_ALL/safe043.c | 2 +- .../ppc_safe043_PSO_OPC/safe043.c | 2 +- .../ppc_safe043_RMO_ALL/safe043.c | 2 +- .../ppc_safe043_RMO_OPC/safe043.c | 2 +- .../ppc_safe043_TSO_ALL/safe043.c | 2 +- .../ppc_safe043_TSO_OPC/safe043.c | 2 +- .../ppc_safe044_POWER_ALL/safe044.c | 2 +- .../ppc_safe044_POWER_OPC/safe044.c | 2 +- .../ppc_safe044_PSO_ALL/safe044.c | 2 +- .../ppc_safe044_PSO_OPC/safe044.c | 2 +- .../ppc_safe044_RMO_ALL/safe044.c | 2 +- .../ppc_safe044_RMO_OPC/safe044.c | 2 +- .../ppc_safe044_TSO_ALL/safe044.c | 2 +- .../ppc_safe044_TSO_OPC/safe044.c | 2 +- .../ppc_safe063_PSO_ALL/safe063.c | 2 +- .../ppc_safe063_PSO_OPC/safe063.c | 2 +- .../ppc_safe063_TSO_ALL/safe063.c | 2 +- .../ppc_safe063_TSO_OPC/safe063.c | 2 +- .../ppc_safe064_POWER_ALL/safe064.c | 2 +- .../ppc_safe064_POWER_OPC/safe064.c | 2 +- .../ppc_safe064_PSO_ALL/safe064.c | 2 +- .../ppc_safe064_PSO_OPC/safe064.c | 2 +- .../ppc_safe064_RMO_ALL/safe064.c | 2 +- .../ppc_safe064_RMO_OPC/safe064.c | 2 +- .../ppc_safe064_TSO_ALL/safe064.c | 2 +- .../ppc_safe064_TSO_OPC/safe064.c | 2 +- .../ppc_safe073_PSO_ALL/safe073.c | 2 +- .../ppc_safe073_PSO_OPC/safe073.c | 2 +- .../ppc_safe073_RMO_ALL/safe073.c | 2 +- .../ppc_safe073_RMO_OPC/safe073.c | 2 +- .../ppc_safe073_TSO_ALL/safe073.c | 2 +- .../ppc_safe073_TSO_OPC/safe073.c | 2 +- .../ppc_safe074_PSO_ALL/safe074.c | 2 +- .../ppc_safe074_PSO_OPC/safe074.c | 2 +- .../ppc_safe074_RMO_ALL/safe074.c | 2 +- .../ppc_safe074_RMO_OPC/safe074.c | 2 +- .../ppc_safe074_TSO_ALL/safe074.c | 2 +- .../ppc_safe074_TSO_OPC/safe074.c | 2 +- .../ppc_safe075_POWER_ALL/safe075.c | 2 +- .../ppc_safe075_POWER_OPC/safe075.c | 2 +- .../ppc_safe075_PSO_ALL/safe075.c | 2 +- .../ppc_safe075_PSO_OPC/safe075.c | 2 +- .../ppc_safe075_RMO_ALL/safe075.c | 2 +- .../ppc_safe075_RMO_OPC/safe075.c | 2 +- .../ppc_safe075_TSO_ALL/safe075.c | 2 +- .../ppc_safe075_TSO_OPC/safe075.c | 2 +- .../ppc_safe076_POWER_ALL/safe076.c | 2 +- .../ppc_safe076_POWER_OPC/safe076.c | 2 +- .../ppc_safe076_PSO_ALL/safe076.c | 2 +- .../ppc_safe076_PSO_OPC/safe076.c | 2 +- .../ppc_safe076_RMO_ALL/safe076.c | 2 +- .../ppc_safe076_RMO_OPC/safe076.c | 2 +- .../ppc_safe076_TSO_ALL/safe076.c | 2 +- .../ppc_safe076_TSO_OPC/safe076.c | 2 +- .../ppc_safe077_PSO_ALL/safe077.c | 2 +- .../ppc_safe077_PSO_OPC/safe077.c | 2 +- .../ppc_safe077_RMO_ALL/safe077.c | 2 +- .../ppc_safe077_RMO_OPC/safe077.c | 2 +- .../ppc_safe077_TSO_ALL/safe077.c | 2 +- .../ppc_safe077_TSO_OPC/safe077.c | 2 +- .../ppc_safe078_POWER_ALL/safe078.c | 2 +- .../ppc_safe078_POWER_OPC/safe078.c | 2 +- .../ppc_safe078_PSO_ALL/safe078.c | 2 +- .../ppc_safe078_PSO_OPC/safe078.c | 2 +- .../ppc_safe078_RMO_ALL/safe078.c | 2 +- .../ppc_safe078_RMO_OPC/safe078.c | 2 +- .../ppc_safe078_TSO_ALL/safe078.c | 2 +- .../ppc_safe078_TSO_OPC/safe078.c | 2 +- .../ppc_safe079_POWER_ALL/safe079.c | 2 +- .../ppc_safe079_POWER_OPC/safe079.c | 2 +- .../ppc_safe079_PSO_ALL/safe079.c | 2 +- .../ppc_safe079_PSO_OPC/safe079.c | 2 +- .../ppc_safe079_RMO_ALL/safe079.c | 2 +- .../ppc_safe079_RMO_OPC/safe079.c | 2 +- .../ppc_safe079_TSO_ALL/safe079.c | 2 +- .../ppc_safe079_TSO_OPC/safe079.c | 2 +- .../ppc_safe080_POWER_ALL/safe080.c | 2 +- .../ppc_safe080_POWER_OPC/safe080.c | 2 +- .../ppc_safe080_PSO_ALL/safe080.c | 2 +- .../ppc_safe080_PSO_OPC/safe080.c | 2 +- .../ppc_safe080_RMO_ALL/safe080.c | 2 +- .../ppc_safe080_RMO_OPC/safe080.c | 2 +- .../ppc_safe080_TSO_ALL/safe080.c | 2 +- .../ppc_safe080_TSO_OPC/safe080.c | 2 +- .../ppc_safe081_POWER_ALL/safe081.c | 2 +- .../ppc_safe081_POWER_OPC/safe081.c | 2 +- .../ppc_safe081_PSO_ALL/safe081.c | 2 +- .../ppc_safe081_PSO_OPC/safe081.c | 2 +- .../ppc_safe081_RMO_ALL/safe081.c | 2 +- .../ppc_safe081_RMO_OPC/safe081.c | 2 +- .../ppc_safe081_TSO_ALL/safe081.c | 2 +- .../ppc_safe081_TSO_OPC/safe081.c | 2 +- .../ppc_safe108_PSO_ALL/safe108.c | 2 +- .../ppc_safe108_PSO_OPC/safe108.c | 2 +- .../ppc_safe108_TSO_ALL/safe108.c | 2 +- .../ppc_safe108_TSO_OPC/safe108.c | 2 +- .../ppc_safe112_PSO_ALL/safe112.c | 2 +- .../ppc_safe112_PSO_OPC/safe112.c | 2 +- .../ppc_safe112_RMO_ALL/safe112.c | 2 +- .../ppc_safe112_RMO_OPC/safe112.c | 2 +- .../ppc_safe112_TSO_ALL/safe112.c | 2 +- .../ppc_safe112_TSO_OPC/safe112.c | 2 +- .../ppc_safe113_PSO_ALL/safe113.c | 2 +- .../ppc_safe113_PSO_OPC/safe113.c | 2 +- .../ppc_safe113_TSO_ALL/safe113.c | 2 +- .../ppc_safe113_TSO_OPC/safe113.c | 2 +- .../ppc_safe114_POWER_ALL/safe114.c | 2 +- .../ppc_safe114_POWER_OPC/safe114.c | 2 +- .../ppc_safe114_PSO_ALL/safe114.c | 2 +- .../ppc_safe114_PSO_OPC/safe114.c | 2 +- .../ppc_safe114_RMO_ALL/safe114.c | 2 +- .../ppc_safe114_RMO_OPC/safe114.c | 2 +- .../ppc_safe114_TSO_ALL/safe114.c | 2 +- .../ppc_safe114_TSO_OPC/safe114.c | 2 +- .../ppc_thin000_PSO_ALL/thin000.c | 4 ++-- .../ppc_thin000_PSO_OPC/thin000.c | 4 ++-- .../ppc_thin000_TSO_ALL/thin000.c | 4 ++-- .../ppc_thin000_TSO_OPC/thin000.c | 4 ++-- .../ppc_thin001_PSO_ALL/thin001.c | 6 +++--- .../ppc_thin001_PSO_OPC/thin001.c | 6 +++--- .../ppc_thin001_TSO_ALL/thin001.c | 6 +++--- .../ppc_thin001_TSO_OPC/thin001.c | 6 +++--- .../ppc_thin002_PSO_ALL/thin002.c | 8 ++++---- .../ppc_thin002_PSO_OPC/thin002.c | 8 ++++---- .../ppc_thin002_TSO_ALL/thin002.c | 8 ++++---- .../ppc_thin002_TSO_OPC/thin002.c | 8 ++++---- .../ppc_thin003_PSO_ALL/thin003.c | 10 +++++----- .../ppc_thin003_PSO_OPC/thin003.c | 10 +++++----- .../ppc_thin003_TSO_ALL/thin003.c | 10 +++++----- .../ppc_thin003_TSO_OPC/thin003.c | 10 +++++----- .../ppc_thin004_PSO_ALL/thin004.c | 8 ++++---- .../ppc_thin004_PSO_OPC/thin004.c | 8 ++++---- .../ppc_thin004_TSO_ALL/thin004.c | 8 ++++---- .../ppc_thin004_TSO_OPC/thin004.c | 8 ++++---- .../ppc_thin005_PSO_ALL/thin005.c | 6 +++--- .../ppc_thin005_PSO_OPC/thin005.c | 6 +++--- .../ppc_thin005_TSO_ALL/thin005.c | 6 +++--- .../ppc_thin005_TSO_OPC/thin005.c | 6 +++--- .../ppc_thin006_PSO_ALL/thin006.c | 10 +++++----- .../ppc_thin006_PSO_OPC/thin006.c | 10 +++++----- .../ppc_thin006_TSO_ALL/thin006.c | 10 +++++----- .../ppc_thin006_TSO_OPC/thin006.c | 10 +++++----- .../ppc_thin007_PSO_ALL/thin007.c | 8 ++++---- .../ppc_thin007_PSO_OPC/thin007.c | 8 ++++---- .../ppc_thin007_TSO_ALL/thin007.c | 8 ++++---- .../ppc_thin007_TSO_OPC/thin007.c | 8 ++++---- 400 files changed, 581 insertions(+), 581 deletions(-) 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 index 9014ba04465..51847850794 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_ALL/aclwsrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_ALL/aclwsrr000.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 9014ba04465..51847850794 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPC/aclwsrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPC/aclwsrr000.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 9014ba04465..51847850794 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_ALL/aclwsrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_ALL/aclwsrr000.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 9014ba04465..51847850794 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPC/aclwsrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPC/aclwsrr000.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 9014ba04465..51847850794 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_ALL/aclwsrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_ALL/aclwsrr000.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 9014ba04465..51847850794 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPC/aclwsrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPC/aclwsrr000.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 47719b99fb3..17d43b76d8a 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_ALL/aclwsrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_ALL/aclwsrr002.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 47719b99fb3..17d43b76d8a 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPC/aclwsrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPC/aclwsrr002.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 47719b99fb3..17d43b76d8a 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_ALL/aclwsrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_ALL/aclwsrr002.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 47719b99fb3..17d43b76d8a 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPC/aclwsrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPC/aclwsrr002.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 47719b99fb3..17d43b76d8a 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_ALL/aclwsrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_ALL/aclwsrr002.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 47719b99fb3..17d43b76d8a 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPC/aclwsrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPC/aclwsrr002.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 47719b99fb3..17d43b76d8a 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_ALL/aclwsrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_ALL/aclwsrr002.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 47719b99fb3..17d43b76d8a 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPC/aclwsrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPC/aclwsrr002.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 2919c33539e..96c78fa8b46 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_ALL/bclwdww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_ALL/bclwdww000.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 2919c33539e..96c78fa8b46 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPC/bclwdww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPC/bclwdww000.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 2919c33539e..96c78fa8b46 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_ALL/bclwdww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_ALL/bclwdww000.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 2919c33539e..96c78fa8b46 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPC/bclwdww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPC/bclwdww000.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 2919c33539e..96c78fa8b46 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_ALL/bclwdww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_ALL/bclwdww000.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 2919c33539e..96c78fa8b46 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPC/bclwdww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPC/bclwdww000.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 545d47897fd..032b809d1b0 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_ALL/bclwdww001.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_ALL/bclwdww001.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 545d47897fd..032b809d1b0 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPC/bclwdww001.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPC/bclwdww001.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 545d47897fd..032b809d1b0 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_ALL/bclwdww001.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_ALL/bclwdww001.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 545d47897fd..032b809d1b0 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPC/bclwdww001.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPC/bclwdww001.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 3adf34a702f..b85e99471a3 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_ALL/bclwdww003.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_ALL/bclwdww003.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 3adf34a702f..b85e99471a3 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPC/bclwdww003.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPC/bclwdww003.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 3adf34a702f..b85e99471a3 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_ALL/bclwdww003.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_ALL/bclwdww003.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 3adf34a702f..b85e99471a3 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPC/bclwdww003.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPC/bclwdww003.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 3adf34a702f..b85e99471a3 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_ALL/bclwdww003.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_ALL/bclwdww003.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 3adf34a702f..b85e99471a3 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPC/bclwdww003.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPC/bclwdww003.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 8462bfbc067..0a4277a6296 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_ALL/bclwdww004.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_ALL/bclwdww004.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 8462bfbc067..0a4277a6296 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPC/bclwdww004.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPC/bclwdww004.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 8462bfbc067..0a4277a6296 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_ALL/bclwdww004.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_ALL/bclwdww004.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 8462bfbc067..0a4277a6296 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPC/bclwdww004.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPC/bclwdww004.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 8462bfbc067..0a4277a6296 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_ALL/bclwdww004.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_ALL/bclwdww004.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 8462bfbc067..0a4277a6296 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPC/bclwdww004.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPC/bclwdww004.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index fa6be99d28d..d6576c17fab 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_ALL/bclwsww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_ALL/bclwsww000.c @@ -13,12 +13,12 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int __unbuffered_p3_r3 = 0; 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 index fa6be99d28d..d6576c17fab 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPC/bclwsww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPC/bclwsww000.c @@ -13,12 +13,12 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int __unbuffered_p3_r3 = 0; 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 index fa6be99d28d..d6576c17fab 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_ALL/bclwsww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_ALL/bclwsww000.c @@ -13,12 +13,12 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int __unbuffered_p3_r3 = 0; 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 index fa6be99d28d..d6576c17fab 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPC/bclwsww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPC/bclwsww000.c @@ -13,12 +13,12 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int __unbuffered_p3_r3 = 0; 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 index fa6be99d28d..d6576c17fab 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_ALL/bclwsww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_ALL/bclwsww000.c @@ -13,12 +13,12 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int __unbuffered_p3_r3 = 0; 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 index fa6be99d28d..d6576c17fab 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPC/bclwsww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPC/bclwsww000.c @@ -13,12 +13,12 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int __unbuffered_p3_r3 = 0; 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 index fa6be99d28d..d6576c17fab 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_ALL/bclwsww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_ALL/bclwsww000.c @@ -13,12 +13,12 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int __unbuffered_p3_r3 = 0; 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 index fa6be99d28d..d6576c17fab 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPC/bclwsww000.c +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPC/bclwsww000.c @@ -13,12 +13,12 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int __unbuffered_p3_r3 = 0; 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 index 5bdf2ff44be..a70dbfc2083 100644 --- 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 @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 5bdf2ff44be..a70dbfc2083 100644 --- 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 @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 5bdf2ff44be..a70dbfc2083 100644 --- 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 @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 5bdf2ff44be..a70dbfc2083 100644 --- 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 @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 5bdf2ff44be..a70dbfc2083 100644 --- 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 @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 5bdf2ff44be..a70dbfc2083 100644 --- 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 @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 4a81d136a05..fbf7c7685ac 100644 --- 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 @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 4a81d136a05..fbf7c7685ac 100644 --- 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 @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 4a81d136a05..fbf7c7685ac 100644 --- 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 @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 4a81d136a05..fbf7c7685ac 100644 --- 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 @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 4a81d136a05..fbf7c7685ac 100644 --- 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 @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index 4a81d136a05..fbf7c7685ac 100644 --- 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 @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int x = 0; int y = 0; 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 index cbb15acf714..576041bd5c0 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_ALL/lwswr000.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_ALL/lwswr000.c @@ -16,13 +16,13 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p3_r4 = 0; int __unbuffered_p3_r5 = 0; int x = 0; int y = 0; 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 index cbb15acf714..576041bd5c0 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPC/lwswr000.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPC/lwswr000.c @@ -16,13 +16,13 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p3_r4 = 0; int __unbuffered_p3_r5 = 0; int x = 0; int y = 0; 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 index 3c80650c0b4..a178f543cc8 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_ALL/lwswr001.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_ALL/lwswr001.c @@ -14,13 +14,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 3c80650c0b4..a178f543cc8 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPC/lwswr001.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPC/lwswr001.c @@ -14,13 +14,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 3c80650c0b4..a178f543cc8 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPC/lwswr001.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPC/lwswr001.c @@ -14,13 +14,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 3c80650c0b4..a178f543cc8 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPC/lwswr001.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPC/lwswr001.c @@ -14,13 +14,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 3c80650c0b4..a178f543cc8 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPC/lwswr001.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPC/lwswr001.c @@ -14,13 +14,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 8fbce92a0a6..89dc1b9101c 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_ALL/lwswr002.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_ALL/lwswr002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 8fbce92a0a6..89dc1b9101c 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPC/lwswr002.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPC/lwswr002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 8fbce92a0a6..89dc1b9101c 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_ALL/lwswr002.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_ALL/lwswr002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 8fbce92a0a6..89dc1b9101c 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPC/lwswr002.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPC/lwswr002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 8fbce92a0a6..89dc1b9101c 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_ALL/lwswr002.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_ALL/lwswr002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 8fbce92a0a6..89dc1b9101c 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPC/lwswr002.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPC/lwswr002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 8fbce92a0a6..89dc1b9101c 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_ALL/lwswr002.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_ALL/lwswr002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 8fbce92a0a6..89dc1b9101c 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPC/lwswr002.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPC/lwswr002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 504a017b14c..7732c2ac2ef 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_ALL/lwswr003.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_ALL/lwswr003.c @@ -14,15 +14,15 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 504a017b14c..7732c2ac2ef 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPC/lwswr003.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPC/lwswr003.c @@ -14,15 +14,15 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 504a017b14c..7732c2ac2ef 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_ALL/lwswr003.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_ALL/lwswr003.c @@ -14,15 +14,15 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 504a017b14c..7732c2ac2ef 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPC/lwswr003.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPC/lwswr003.c @@ -14,15 +14,15 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 504a017b14c..7732c2ac2ef 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_ALL/lwswr003.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_ALL/lwswr003.c @@ -14,15 +14,15 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 504a017b14c..7732c2ac2ef 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPC/lwswr003.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPC/lwswr003.c @@ -14,15 +14,15 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 504a017b14c..7732c2ac2ef 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_ALL/lwswr003.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_ALL/lwswr003.c @@ -14,15 +14,15 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 504a017b14c..7732c2ac2ef 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPC/lwswr003.c +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPC/lwswr003.c @@ -14,15 +14,15 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r5 = 0; int x = 0; int y = 0; 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 index 761c44e999e..ed1a35b568e 100644 --- a/regression/goto-instrument-wmm-core/ppc_mix000_PSO_ALL/mix000.c +++ b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_ALL/mix000.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 761c44e999e..ed1a35b568e 100644 --- a/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPC/mix000.c +++ b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPC/mix000.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 761c44e999e..ed1a35b568e 100644 --- a/regression/goto-instrument-wmm-core/ppc_mix000_RMO_ALL/mix000.c +++ b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_ALL/mix000.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 761c44e999e..ed1a35b568e 100644 --- a/regression/goto-instrument-wmm-core/ppc_mix000_TSO_ALL/mix000.c +++ b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_ALL/mix000.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 761c44e999e..ed1a35b568e 100644 --- a/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPC/mix000.c +++ b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPC/mix000.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index 0ca7bda0643..443cd669c68 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_ALL/podrwposwr000.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_ALL/podrwposwr000.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r8 = 0; 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 index 0ca7bda0643..443cd669c68 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPC/podrwposwr000.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPC/podrwposwr000.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r8 = 0; 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 index 0ca7bda0643..443cd669c68 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_ALL/podrwposwr000.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_ALL/podrwposwr000.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r8 = 0; 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 index 0ca7bda0643..443cd669c68 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPC/podrwposwr000.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPC/podrwposwr000.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r8 = 0; 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 index c9a23e8ee53..d3e7965f394 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_ALL/podrwposwr001.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_ALL/podrwposwr001.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index c9a23e8ee53..d3e7965f394 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPC/podrwposwr001.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPC/podrwposwr001.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index c9a23e8ee53..d3e7965f394 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_ALL/podrwposwr001.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_ALL/podrwposwr001.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index c9a23e8ee53..d3e7965f394 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPC/podrwposwr001.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPC/podrwposwr001.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index 42d904da188..911f2a39b7b 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_ALL/podrwposwr002.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_ALL/podrwposwr002.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index 42d904da188..911f2a39b7b 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPC/podrwposwr002.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPC/podrwposwr002.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index 42d904da188..911f2a39b7b 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_ALL/podrwposwr002.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_ALL/podrwposwr002.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index 42d904da188..911f2a39b7b 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPC/podrwposwr002.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPC/podrwposwr002.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index 419c0236208..a77a97f2e31 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_ALL/podrwposwr003.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_ALL/podrwposwr003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index 419c0236208..a77a97f2e31 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPC/podrwposwr003.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPC/podrwposwr003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index 419c0236208..a77a97f2e31 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_ALL/podrwposwr003.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_ALL/podrwposwr003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index 419c0236208..a77a97f2e31 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPC/podrwposwr003.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPC/podrwposwr003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r8 = 0; 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 index 6a9cdaa3cac..27e23b58410 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_ALL/podrwposwr005.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_ALL/podrwposwr005.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r7 = 0; int x = 0; int y = 0; 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 index 6a9cdaa3cac..27e23b58410 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPC/podrwposwr005.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPC/podrwposwr005.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r7 = 0; int x = 0; int y = 0; 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 index 6a9cdaa3cac..27e23b58410 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_ALL/podrwposwr005.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_ALL/podrwposwr005.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r7 = 0; int x = 0; int y = 0; 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 index 6a9cdaa3cac..27e23b58410 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPC/podrwposwr005.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPC/podrwposwr005.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r7 = 0; int x = 0; int y = 0; 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 index 8a5f07c7a3c..f083725e8b0 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_ALL/podrwposwr007.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_ALL/podrwposwr007.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 8a5f07c7a3c..f083725e8b0 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPC/podrwposwr007.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPC/podrwposwr007.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 8a5f07c7a3c..f083725e8b0 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_ALL/podrwposwr007.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_ALL/podrwposwr007.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 8a5f07c7a3c..f083725e8b0 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPC/podrwposwr007.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPC/podrwposwr007.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 1e083a56240..172cafe79e5 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_ALL/podrwposwr008.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_ALL/podrwposwr008.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 1e083a56240..172cafe79e5 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPC/podrwposwr008.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPC/podrwposwr008.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 1e083a56240..172cafe79e5 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_ALL/podrwposwr008.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_ALL/podrwposwr008.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 1e083a56240..172cafe79e5 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPC/podrwposwr008.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPC/podrwposwr008.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index a1ece5d600f..ca589ed43cb 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_ALL/podrwposwr009.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_ALL/podrwposwr009.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r7 = 0; int x = 0; int y = 0; 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 index a1ece5d600f..ca589ed43cb 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPC/podrwposwr009.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPC/podrwposwr009.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r7 = 0; int x = 0; int y = 0; 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 index a1ece5d600f..ca589ed43cb 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_ALL/podrwposwr009.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_ALL/podrwposwr009.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r7 = 0; int x = 0; int y = 0; 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 index a1ece5d600f..ca589ed43cb 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPC/podrwposwr009.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPC/podrwposwr009.c @@ -17,7 +17,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p1_r6 = 0; int __unbuffered_p1_r7 = 0; int x = 0; int y = 0; 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 index 2c78b38dfcc..8d112ec7451 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_ALL/podrwposwr011.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_ALL/podrwposwr011.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 2c78b38dfcc..8d112ec7451 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPC/podrwposwr011.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPC/podrwposwr011.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 2c78b38dfcc..8d112ec7451 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_ALL/podrwposwr011.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_ALL/podrwposwr011.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 2c78b38dfcc..8d112ec7451 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPC/podrwposwr011.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPC/podrwposwr011.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 3fedd6602e9..fef8ca0c055 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_ALL/podrwposwr012.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_ALL/podrwposwr012.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 3fedd6602e9..fef8ca0c055 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPC/podrwposwr012.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPC/podrwposwr012.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 3fedd6602e9..fef8ca0c055 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_ALL/podrwposwr012.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_ALL/podrwposwr012.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 3fedd6602e9..fef8ca0c055 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPC/podrwposwr012.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPC/podrwposwr012.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 40d9ba41d9f..13028fb57f4 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_ALL/podrwposwr014.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_ALL/podrwposwr014.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 40d9ba41d9f..13028fb57f4 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPC/podrwposwr014.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPC/podrwposwr014.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 40d9ba41d9f..13028fb57f4 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_ALL/podrwposwr014.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_ALL/podrwposwr014.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 40d9ba41d9f..13028fb57f4 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPC/podrwposwr014.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPC/podrwposwr014.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index bae67e3f495..290e67c3d72 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_ALL/podrwposwr015.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_ALL/podrwposwr015.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index bae67e3f495..290e67c3d72 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPC/podrwposwr015.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPC/podrwposwr015.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index bae67e3f495..290e67c3d72 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_ALL/podrwposwr015.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_ALL/podrwposwr015.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index bae67e3f495..290e67c3d72 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPC/podrwposwr015.c +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPC/podrwposwr015.c @@ -19,7 +19,7 @@ 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; +__CPROVER_thread_local int __unbuffered_p2_r6 = 0; int __unbuffered_p2_r7 = 0; int a = 0; int x = 0; 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 index 43dae58e9b9..0403afe07d2 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_ALL/posrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_ALL/posrr000.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int __unbuffered_p1_r7 = 0; int x = 0; 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 index 43dae58e9b9..0403afe07d2 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPC/posrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPC/posrr000.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int __unbuffered_p1_r7 = 0; int x = 0; 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 index 43dae58e9b9..0403afe07d2 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_ALL/posrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_ALL/posrr000.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int __unbuffered_p1_r7 = 0; int x = 0; 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 index 43dae58e9b9..0403afe07d2 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPC/posrr000.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPC/posrr000.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int __unbuffered_p1_r7 = 0; int x = 0; 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 index ea414e2127e..4dcdf3e9b41 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_ALL/posrr001.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_ALL/posrr001.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; int x = 0; 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 index ea414e2127e..4dcdf3e9b41 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPC/posrr001.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPC/posrr001.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; int x = 0; 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 index ea414e2127e..4dcdf3e9b41 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_ALL/posrr001.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_ALL/posrr001.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; int x = 0; 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 index ea414e2127e..4dcdf3e9b41 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPC/posrr001.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPC/posrr001.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; int x = 0; 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 index 4b25cefbb68..ec25ce2faeb 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_ALL/posrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_ALL/posrr002.c @@ -15,10 +15,10 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int x = 0; int y = 0; 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 index 4b25cefbb68..ec25ce2faeb 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPC/posrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPC/posrr002.c @@ -15,10 +15,10 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int x = 0; int y = 0; 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 index 4b25cefbb68..ec25ce2faeb 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_ALL/posrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_ALL/posrr002.c @@ -15,10 +15,10 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int x = 0; int y = 0; 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 index 4b25cefbb68..ec25ce2faeb 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPC/posrr002.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPC/posrr002.c @@ -15,10 +15,10 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int x = 0; int y = 0; 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 index 3e3eebf7425..a248db2e3c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_ALL/posrr003.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_ALL/posrr003.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 3e3eebf7425..a248db2e3c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPC/posrr003.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPC/posrr003.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 3e3eebf7425..a248db2e3c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_ALL/posrr003.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_ALL/posrr003.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 3e3eebf7425..a248db2e3c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPC/posrr003.c +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPC/posrr003.c @@ -16,7 +16,7 @@ int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; -int __unbuffered_p1_r4 = 0; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index fd5d9809639..027c5a3f4c3 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_ALL/rfe000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_ALL/rfe000.c @@ -13,10 +13,10 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index fd5d9809639..027c5a3f4c3 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPC/rfe000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPC/rfe000.c @@ -13,10 +13,10 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index fd5d9809639..027c5a3f4c3 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_ALL/rfe000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_ALL/rfe000.c @@ -13,10 +13,10 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index fd5d9809639..027c5a3f4c3 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPC/rfe000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPC/rfe000.c @@ -13,10 +13,10 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 5ae006485f6..a2b9acf62a9 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_ALL/rfe001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_ALL/rfe001.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 5ae006485f6..a2b9acf62a9 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPC/rfe001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPC/rfe001.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 5ae006485f6..a2b9acf62a9 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_ALL/rfe001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_ALL/rfe001.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 5ae006485f6..a2b9acf62a9 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPC/rfe001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPC/rfe001.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index dc09f2a0a79..04f4ed2706e 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_ALL/rfe002.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_ALL/rfe002.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index dc09f2a0a79..04f4ed2706e 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPC/rfe002.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPC/rfe002.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index dc09f2a0a79..04f4ed2706e 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_ALL/rfe002.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_ALL/rfe002.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index dc09f2a0a79..04f4ed2706e 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPC/rfe002.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPC/rfe002.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index e2702aad4a6..784fd981db5 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_ALL/rfe003.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_ALL/rfe003.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index e2702aad4a6..784fd981db5 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPC/rfe003.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPC/rfe003.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index e2702aad4a6..2f90225bbe0 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_ALL/rfe003.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_ALL/rfe003.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p2_r1 = 0; 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 index e2702aad4a6..2f90225bbe0 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPC/rfe003.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPC/rfe003.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p2_r1 = 0; 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 index e2702aad4a6..784fd981db5 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_ALL/rfe003.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_ALL/rfe003.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index e2702aad4a6..784fd981db5 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPC/rfe003.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPC/rfe003.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 9683f7c7d0e..cccfa85dad8 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_ALL/rfe004.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_ALL/rfe004.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index 9683f7c7d0e..cccfa85dad8 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPC/rfe004.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPC/rfe004.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index 9683f7c7d0e..cccfa85dad8 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_ALL/rfe004.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_ALL/rfe004.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index 9683f7c7d0e..cccfa85dad8 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPC/rfe004.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPC/rfe004.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index fe0b72c0a25..60ee16f80cf 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_ALL/rfe005.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_ALL/rfe005.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index fe0b72c0a25..60ee16f80cf 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPC/rfe005.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPC/rfe005.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index fe0b72c0a25..edf5c1b47e2 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_ALL/rfe005.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_ALL/rfe005.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p2_r1 = 0; 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 index fe0b72c0a25..edf5c1b47e2 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPC/rfe005.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPC/rfe005.c @@ -13,7 +13,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p2_r1 = 0; 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 index fe0b72c0a25..60ee16f80cf 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_ALL/rfe005.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_ALL/rfe005.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index fe0b72c0a25..60ee16f80cf 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPC/rfe005.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPC/rfe005.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index 1d820f3e05d..81f192c9d59 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_ALL/rfe006.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_ALL/rfe006.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index 1d820f3e05d..81f192c9d59 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPC/rfe006.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPC/rfe006.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index 1d820f3e05d..81f192c9d59 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_ALL/rfe006.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_ALL/rfe006.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index 1d820f3e05d..81f192c9d59 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPC/rfe006.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPC/rfe006.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index 1d820f3e05d..81f192c9d59 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_ALL/rfe006.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_ALL/rfe006.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index 1d820f3e05d..81f192c9d59 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPC/rfe006.c +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPC/rfe006.c @@ -13,11 +13,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; int x = 0; 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 index cbd34c8e45a..0d8afa8c771 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_ALL/rfi000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_ALL/rfi000.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index cbd34c8e45a..0d8afa8c771 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPC/rfi000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPC/rfi000.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index cbd34c8e45a..0d8afa8c771 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_ALL/rfi000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_ALL/rfi000.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index cbd34c8e45a..0d8afa8c771 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPC/rfi000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPC/rfi000.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index cbd34c8e45a..0d8afa8c771 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_ALL/rfi000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_ALL/rfi000.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index cbd34c8e45a..0d8afa8c771 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPC/rfi000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPC/rfi000.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index cbd34c8e45a..0d8afa8c771 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_ALL/rfi000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_ALL/rfi000.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index cbd34c8e45a..0d8afa8c771 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPC/rfi000.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPC/rfi000.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index c9e4f79449b..5f5c8946356 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_ALL/rfi001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_ALL/rfi001.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index c9e4f79449b..5f5c8946356 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPC/rfi001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPC/rfi001.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index c9e4f79449b..5f5c8946356 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_ALL/rfi001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_ALL/rfi001.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index c9e4f79449b..5f5c8946356 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPC/rfi001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPC/rfi001.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index c9e4f79449b..5f5c8946356 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_ALL/rfi001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_ALL/rfi001.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index c9e4f79449b..5f5c8946356 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPC/rfi001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPC/rfi001.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index c9e4f79449b..5f5c8946356 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_ALL/rfi001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_ALL/rfi001.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index c9e4f79449b..5f5c8946356 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPC/rfi001.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPC/rfi001.c @@ -14,7 +14,7 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r5 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; 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 index c220303d7f4..1a2e8dfdcf8 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_ALL/rfi002.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_ALL/rfi002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index c220303d7f4..1a2e8dfdcf8 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPC/rfi002.c +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPC/rfi002.c @@ -14,11 +14,11 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; -int __unbuffered_p0_r4 = 0; +__CPROVER_thread_local 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; +__CPROVER_thread_local int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r5 = 0; int x = 0; int y = 0; 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 index 6ffd165cbb6..d5e6804c691 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe000_PSO_ALL/safe000.c +++ b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_ALL/safe000.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6ffd165cbb6..d5e6804c691 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPC/safe000.c +++ b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPC/safe000.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6ffd165cbb6..d5e6804c691 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe000_TSO_ALL/safe000.c +++ b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_ALL/safe000.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6ffd165cbb6..d5e6804c691 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPC/safe000.c +++ b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPC/safe000.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 9cdaf193ec5..d9d01d74215 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe001_PSO_ALL/safe001.c +++ b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_ALL/safe001.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 9cdaf193ec5..d9d01d74215 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPC/safe001.c +++ b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPC/safe001.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 9cdaf193ec5..d9d01d74215 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe001_TSO_ALL/safe001.c +++ b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_ALL/safe001.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 9cdaf193ec5..d9d01d74215 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPC/safe001.c +++ b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPC/safe001.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 8ab3de2c694..50a06c3f97c 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe002_PSO_ALL/safe002.c +++ b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_ALL/safe002.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 8ab3de2c694..50a06c3f97c 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPC/safe002.c +++ b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPC/safe002.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 8ab3de2c694..50a06c3f97c 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe002_TSO_ALL/safe002.c +++ b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_ALL/safe002.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 8ab3de2c694..50a06c3f97c 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPC/safe002.c +++ b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPC/safe002.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index eb0bb9220f7..7052bc572e8 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe003_PSO_ALL/safe003.c +++ b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_ALL/safe003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index eb0bb9220f7..7052bc572e8 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPC/safe003.c +++ b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPC/safe003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index eb0bb9220f7..7052bc572e8 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe003_RMO_ALL/safe003.c +++ b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_ALL/safe003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index eb0bb9220f7..7052bc572e8 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPC/safe003.c +++ b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPC/safe003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index eb0bb9220f7..7052bc572e8 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe003_TSO_ALL/safe003.c +++ b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_ALL/safe003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index eb0bb9220f7..7052bc572e8 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPC/safe003.c +++ b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPC/safe003.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6b1fa9a097a..ef405807442 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe004_PSO_ALL/safe004.c +++ b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_ALL/safe004.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6b1fa9a097a..ef405807442 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPC/safe004.c +++ b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPC/safe004.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6b1fa9a097a..ef405807442 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe004_RMO_ALL/safe004.c +++ b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_ALL/safe004.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6b1fa9a097a..ef405807442 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPC/safe004.c +++ b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPC/safe004.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6b1fa9a097a..ef405807442 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe004_TSO_ALL/safe004.c +++ b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_ALL/safe004.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6b1fa9a097a..ef405807442 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPC/safe004.c +++ b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPC/safe004.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index aadd54724c0..d145339555b 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe005_PSO_ALL/safe005.c +++ b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_ALL/safe005.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index aadd54724c0..d145339555b 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPC/safe005.c +++ b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPC/safe005.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index aadd54724c0..d145339555b 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe005_RMO_ALL/safe005.c +++ b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_ALL/safe005.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index aadd54724c0..d145339555b 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPC/safe005.c +++ b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPC/safe005.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index aadd54724c0..d145339555b 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe005_TSO_ALL/safe005.c +++ b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_ALL/safe005.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index aadd54724c0..d145339555b 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPC/safe005.c +++ b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPC/safe005.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index b68842537a5..05c5560a89f 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe006_PSO_ALL/safe006.c +++ b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_ALL/safe006.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index b68842537a5..05c5560a89f 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPC/safe006.c +++ b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPC/safe006.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index b68842537a5..05c5560a89f 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe006_RMO_ALL/safe006.c +++ b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_ALL/safe006.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index b68842537a5..05c5560a89f 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPC/safe006.c +++ b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPC/safe006.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index b68842537a5..05c5560a89f 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe006_TSO_ALL/safe006.c +++ b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_ALL/safe006.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index b68842537a5..05c5560a89f 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPC/safe006.c +++ b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPC/safe006.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index d066e4cec1e..0bb799b128e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe018_POWER_ALL/safe018.c +++ b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_ALL/safe018.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d066e4cec1e..0bb799b128e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPC/safe018.c +++ b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPC/safe018.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d066e4cec1e..0bb799b128e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe018_PSO_ALL/safe018.c +++ b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_ALL/safe018.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d066e4cec1e..0bb799b128e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPC/safe018.c +++ b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPC/safe018.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d066e4cec1e..0bb799b128e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe018_RMO_ALL/safe018.c +++ b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_ALL/safe018.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d066e4cec1e..0bb799b128e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPC/safe018.c +++ b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPC/safe018.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d066e4cec1e..0bb799b128e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe018_TSO_ALL/safe018.c +++ b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_ALL/safe018.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d066e4cec1e..0bb799b128e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPC/safe018.c +++ b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPC/safe018.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index ddfc36f8f2a..4a1905e8cf4 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe019_POWER_ALL/safe019.c +++ b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_ALL/safe019.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index ddfc36f8f2a..4a1905e8cf4 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPC/safe019.c +++ b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPC/safe019.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index ddfc36f8f2a..4a1905e8cf4 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe019_PSO_ALL/safe019.c +++ b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_ALL/safe019.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index ddfc36f8f2a..4a1905e8cf4 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPC/safe019.c +++ b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPC/safe019.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index ddfc36f8f2a..4a1905e8cf4 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe019_RMO_ALL/safe019.c +++ b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_ALL/safe019.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index ddfc36f8f2a..4a1905e8cf4 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPC/safe019.c +++ b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPC/safe019.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index ddfc36f8f2a..4a1905e8cf4 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe019_TSO_ALL/safe019.c +++ b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_ALL/safe019.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index ddfc36f8f2a..4a1905e8cf4 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPC/safe019.c +++ b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPC/safe019.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 95db9064ecb..98afccd15c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe043_POWER_ALL/safe043.c +++ b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_ALL/safe043.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 95db9064ecb..98afccd15c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPC/safe043.c +++ b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPC/safe043.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 95db9064ecb..98afccd15c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe043_PSO_ALL/safe043.c +++ b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_ALL/safe043.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 95db9064ecb..98afccd15c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPC/safe043.c +++ b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPC/safe043.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 95db9064ecb..98afccd15c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe043_RMO_ALL/safe043.c +++ b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_ALL/safe043.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 95db9064ecb..98afccd15c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPC/safe043.c +++ b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPC/safe043.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 95db9064ecb..98afccd15c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe043_TSO_ALL/safe043.c +++ b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_ALL/safe043.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 95db9064ecb..98afccd15c2 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPC/safe043.c +++ b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPC/safe043.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index b9a0e3761c7..41b16f52947 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe044_POWER_ALL/safe044.c +++ b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_ALL/safe044.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index b9a0e3761c7..41b16f52947 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPC/safe044.c +++ b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPC/safe044.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index b9a0e3761c7..41b16f52947 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe044_PSO_ALL/safe044.c +++ b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_ALL/safe044.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index b9a0e3761c7..41b16f52947 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPC/safe044.c +++ b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPC/safe044.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index b9a0e3761c7..41b16f52947 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe044_RMO_ALL/safe044.c +++ b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_ALL/safe044.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index b9a0e3761c7..41b16f52947 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPC/safe044.c +++ b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPC/safe044.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index b9a0e3761c7..41b16f52947 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe044_TSO_ALL/safe044.c +++ b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_ALL/safe044.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index b9a0e3761c7..41b16f52947 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPC/safe044.c +++ b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPC/safe044.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 80d8654608e..5452f96933a 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe063_PSO_ALL/safe063.c +++ b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_ALL/safe063.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 80d8654608e..5452f96933a 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPC/safe063.c +++ b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPC/safe063.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 80d8654608e..5452f96933a 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe063_TSO_ALL/safe063.c +++ b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_ALL/safe063.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 80d8654608e..5452f96933a 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPC/safe063.c +++ b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPC/safe063.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d83f442f7ef..12c9c123bc1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe064_POWER_ALL/safe064.c +++ b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_ALL/safe064.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d83f442f7ef..12c9c123bc1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPC/safe064.c +++ b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPC/safe064.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d83f442f7ef..12c9c123bc1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe064_PSO_ALL/safe064.c +++ b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_ALL/safe064.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d83f442f7ef..12c9c123bc1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPC/safe064.c +++ b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPC/safe064.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d83f442f7ef..12c9c123bc1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe064_RMO_ALL/safe064.c +++ b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_ALL/safe064.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d83f442f7ef..12c9c123bc1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPC/safe064.c +++ b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPC/safe064.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d83f442f7ef..12c9c123bc1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe064_TSO_ALL/safe064.c +++ b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_ALL/safe064.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index d83f442f7ef..12c9c123bc1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPC/safe064.c +++ b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPC/safe064.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 96678d4f82c..00592fb341e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe073_PSO_ALL/safe073.c +++ b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_ALL/safe073.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 96678d4f82c..00592fb341e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPC/safe073.c +++ b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPC/safe073.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 96678d4f82c..00592fb341e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe073_RMO_ALL/safe073.c +++ b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_ALL/safe073.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 96678d4f82c..00592fb341e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPC/safe073.c +++ b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPC/safe073.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 96678d4f82c..00592fb341e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe073_TSO_ALL/safe073.c +++ b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_ALL/safe073.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 96678d4f82c..00592fb341e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPC/safe073.c +++ b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPC/safe073.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6cc09a1c11e..c90fd968e59 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe074_PSO_ALL/safe074.c +++ b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_ALL/safe074.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6cc09a1c11e..c90fd968e59 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPC/safe074.c +++ b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPC/safe074.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6cc09a1c11e..c90fd968e59 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe074_RMO_ALL/safe074.c +++ b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_ALL/safe074.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6cc09a1c11e..c90fd968e59 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPC/safe074.c +++ b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPC/safe074.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6cc09a1c11e..c90fd968e59 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe074_TSO_ALL/safe074.c +++ b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_ALL/safe074.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 6cc09a1c11e..c90fd968e59 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPC/safe074.c +++ b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPC/safe074.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index b2f1f0b1120..e13807cd5be 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe075_POWER_ALL/safe075.c +++ b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_ALL/safe075.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index b2f1f0b1120..e13807cd5be 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPC/safe075.c +++ b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPC/safe075.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index b2f1f0b1120..e13807cd5be 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe075_PSO_ALL/safe075.c +++ b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_ALL/safe075.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index b2f1f0b1120..e13807cd5be 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPC/safe075.c +++ b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPC/safe075.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index b2f1f0b1120..e13807cd5be 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe075_RMO_ALL/safe075.c +++ b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_ALL/safe075.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index b2f1f0b1120..e13807cd5be 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPC/safe075.c +++ b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPC/safe075.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index b2f1f0b1120..e13807cd5be 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe075_TSO_ALL/safe075.c +++ b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_ALL/safe075.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index b2f1f0b1120..e13807cd5be 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPC/safe075.c +++ b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPC/safe075.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 8802bdab124..c12ab3e0aa3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe076_POWER_ALL/safe076.c +++ b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_ALL/safe076.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 8802bdab124..c12ab3e0aa3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPC/safe076.c +++ b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPC/safe076.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 8802bdab124..c12ab3e0aa3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe076_PSO_ALL/safe076.c +++ b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_ALL/safe076.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 8802bdab124..c12ab3e0aa3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPC/safe076.c +++ b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPC/safe076.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 8802bdab124..c12ab3e0aa3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe076_RMO_ALL/safe076.c +++ b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_ALL/safe076.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 8802bdab124..c12ab3e0aa3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPC/safe076.c +++ b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPC/safe076.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 8802bdab124..c12ab3e0aa3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe076_TSO_ALL/safe076.c +++ b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_ALL/safe076.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 8802bdab124..c12ab3e0aa3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPC/safe076.c +++ b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPC/safe076.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index cd10ab3af45..004b0a95efb 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe077_PSO_ALL/safe077.c +++ b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_ALL/safe077.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index cd10ab3af45..004b0a95efb 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPC/safe077.c +++ b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPC/safe077.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index cd10ab3af45..004b0a95efb 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe077_RMO_ALL/safe077.c +++ b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_ALL/safe077.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index cd10ab3af45..004b0a95efb 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPC/safe077.c +++ b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPC/safe077.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index cd10ab3af45..004b0a95efb 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe077_TSO_ALL/safe077.c +++ b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_ALL/safe077.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index cd10ab3af45..004b0a95efb 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPC/safe077.c +++ b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPC/safe077.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 79ef7a60bb7..eaee81335ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe078_POWER_ALL/safe078.c +++ b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_ALL/safe078.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 79ef7a60bb7..eaee81335ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPC/safe078.c +++ b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPC/safe078.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 79ef7a60bb7..eaee81335ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe078_PSO_ALL/safe078.c +++ b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_ALL/safe078.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 79ef7a60bb7..eaee81335ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPC/safe078.c +++ b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPC/safe078.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 79ef7a60bb7..eaee81335ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe078_RMO_ALL/safe078.c +++ b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_ALL/safe078.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 79ef7a60bb7..eaee81335ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPC/safe078.c +++ b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPC/safe078.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 79ef7a60bb7..eaee81335ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe078_TSO_ALL/safe078.c +++ b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_ALL/safe078.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 79ef7a60bb7..eaee81335ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPC/safe078.c +++ b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPC/safe078.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 0e9462e90eb..77280137821 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe079_POWER_ALL/safe079.c +++ b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_ALL/safe079.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 0e9462e90eb..77280137821 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPC/safe079.c +++ b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPC/safe079.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 0e9462e90eb..77280137821 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe079_PSO_ALL/safe079.c +++ b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_ALL/safe079.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 0e9462e90eb..77280137821 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPC/safe079.c +++ b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPC/safe079.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 0e9462e90eb..77280137821 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe079_RMO_ALL/safe079.c +++ b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_ALL/safe079.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 0e9462e90eb..77280137821 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPC/safe079.c +++ b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPC/safe079.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 0e9462e90eb..77280137821 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe079_TSO_ALL/safe079.c +++ b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_ALL/safe079.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 0e9462e90eb..77280137821 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPC/safe079.c +++ b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPC/safe079.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 594450d273c..43a43333e2e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe080_POWER_ALL/safe080.c +++ b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_ALL/safe080.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 594450d273c..43a43333e2e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPC/safe080.c +++ b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPC/safe080.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 594450d273c..43a43333e2e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe080_PSO_ALL/safe080.c +++ b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_ALL/safe080.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 594450d273c..43a43333e2e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPC/safe080.c +++ b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPC/safe080.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 594450d273c..43a43333e2e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe080_RMO_ALL/safe080.c +++ b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_ALL/safe080.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 594450d273c..43a43333e2e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPC/safe080.c +++ b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPC/safe080.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 594450d273c..43a43333e2e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe080_TSO_ALL/safe080.c +++ b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_ALL/safe080.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 594450d273c..43a43333e2e 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPC/safe080.c +++ b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPC/safe080.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index a4e10dfd871..a1f62bd63dc 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe081_POWER_ALL/safe081.c +++ b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_ALL/safe081.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index a4e10dfd871..a1f62bd63dc 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPC/safe081.c +++ b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPC/safe081.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index a4e10dfd871..a1f62bd63dc 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe081_PSO_ALL/safe081.c +++ b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_ALL/safe081.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index a4e10dfd871..a1f62bd63dc 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPC/safe081.c +++ b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPC/safe081.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index a4e10dfd871..a1f62bd63dc 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe081_RMO_ALL/safe081.c +++ b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_ALL/safe081.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index a4e10dfd871..a1f62bd63dc 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPC/safe081.c +++ b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPC/safe081.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index a4e10dfd871..a1f62bd63dc 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe081_TSO_ALL/safe081.c +++ b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_ALL/safe081.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index a4e10dfd871..a1f62bd63dc 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPC/safe081.c +++ b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPC/safe081.c @@ -17,7 +17,7 @@ int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; int __unbuffered_p1_r3 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index f7245072972..d74578e5462 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe108_PSO_ALL/safe108.c +++ b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_ALL/safe108.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index f7245072972..d74578e5462 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPC/safe108.c +++ b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPC/safe108.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index f7245072972..d74578e5462 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe108_TSO_ALL/safe108.c +++ b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_ALL/safe108.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index f7245072972..d74578e5462 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPC/safe108.c +++ b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPC/safe108.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 4da53a66a37..eb3d4d31831 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe112_PSO_ALL/safe112.c +++ b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_ALL/safe112.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 4da53a66a37..eb3d4d31831 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPC/safe112.c +++ b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPC/safe112.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 4da53a66a37..eb3d4d31831 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe112_RMO_ALL/safe112.c +++ b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_ALL/safe112.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 4da53a66a37..eb3d4d31831 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPC/safe112.c +++ b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPC/safe112.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 4da53a66a37..eb3d4d31831 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe112_TSO_ALL/safe112.c +++ b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_ALL/safe112.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 4da53a66a37..eb3d4d31831 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPC/safe112.c +++ b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPC/safe112.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 93704cc107e..8028900e048 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe113_PSO_ALL/safe113.c +++ b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_ALL/safe113.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 93704cc107e..8028900e048 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPC/safe113.c +++ b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPC/safe113.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 93704cc107e..8028900e048 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe113_TSO_ALL/safe113.c +++ b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_ALL/safe113.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 93704cc107e..8028900e048 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPC/safe113.c +++ b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPC/safe113.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index c7c116acd75..9a9e191f6fa 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe114_POWER_ALL/safe114.c +++ b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_ALL/safe114.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index c7c116acd75..9a9e191f6fa 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPC/safe114.c +++ b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPC/safe114.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index c7c116acd75..9a9e191f6fa 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe114_PSO_ALL/safe114.c +++ b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_ALL/safe114.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index c7c116acd75..9a9e191f6fa 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPC/safe114.c +++ b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPC/safe114.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index c7c116acd75..9a9e191f6fa 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe114_RMO_ALL/safe114.c +++ b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_ALL/safe114.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index c7c116acd75..9a9e191f6fa 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPC/safe114.c +++ b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPC/safe114.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index c7c116acd75..9a9e191f6fa 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe114_TSO_ALL/safe114.c +++ b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_ALL/safe114.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index c7c116acd75..9a9e191f6fa 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPC/safe114.c +++ b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPC/safe114.c @@ -15,7 +15,7 @@ int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; int __unbuffered_p0_r3 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; int __unbuffered_p2_r3 = 0; 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 index 3c2deaeb8b7..6f1dda6a7ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin000_PSO_ALL/thin000.c +++ b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_ALL/thin000.c @@ -13,10 +13,10 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 3c2deaeb8b7..6f1dda6a7ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPC/thin000.c +++ b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPC/thin000.c @@ -13,10 +13,10 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 3c2deaeb8b7..6f1dda6a7ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin000_TSO_ALL/thin000.c +++ b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_ALL/thin000.c @@ -13,10 +13,10 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 3c2deaeb8b7..6f1dda6a7ae 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPC/thin000.c +++ b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPC/thin000.c @@ -13,10 +13,10 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 22eb8177bee..881cda89599 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin001_PSO_ALL/thin001.c +++ b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_ALL/thin001.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 22eb8177bee..881cda89599 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPC/thin001.c +++ b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPC/thin001.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 22eb8177bee..881cda89599 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin001_TSO_ALL/thin001.c +++ b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_ALL/thin001.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 22eb8177bee..881cda89599 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPC/thin001.c +++ b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPC/thin001.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int x = 0; int y = 0; 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 index 1e449c24353..7aa5a7b223f 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin002_PSO_ALL/thin002.c +++ b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_ALL/thin002.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; -int __unbuffered_p3_r3 = 0; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int a = 0; int x = 0; 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 index 1e449c24353..7aa5a7b223f 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPC/thin002.c +++ b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPC/thin002.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; -int __unbuffered_p3_r3 = 0; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int a = 0; int x = 0; 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 index 1e449c24353..7aa5a7b223f 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin002_TSO_ALL/thin002.c +++ b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_ALL/thin002.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; -int __unbuffered_p3_r3 = 0; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int a = 0; int x = 0; 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 index 1e449c24353..7aa5a7b223f 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPC/thin002.c +++ b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPC/thin002.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; -int __unbuffered_p3_r3 = 0; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int a = 0; int x = 0; 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 index 3c921b19608..4b0678151e4 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin003_PSO_ALL/thin003.c +++ b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_ALL/thin003.c @@ -13,19 +13,19 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; -int __unbuffered_p3_r3 = 0; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int a = 0; int b = 0; 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 index 3c921b19608..4b0678151e4 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPC/thin003.c +++ b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPC/thin003.c @@ -13,19 +13,19 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; -int __unbuffered_p3_r3 = 0; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int a = 0; int b = 0; 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 index 3c921b19608..4b0678151e4 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin003_TSO_ALL/thin003.c +++ b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_ALL/thin003.c @@ -13,19 +13,19 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; -int __unbuffered_p3_r3 = 0; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int a = 0; int b = 0; 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 index 3c921b19608..4b0678151e4 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPC/thin003.c +++ b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPC/thin003.c @@ -13,19 +13,19 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int __unbuffered_p3_r1 = 0; -int __unbuffered_p3_r3 = 0; +__CPROVER_thread_local int __unbuffered_p3_r3 = 0; int __unbuffered_p3_r4 = 0; int a = 0; int b = 0; 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 index 637fb2acbb9..d37c240eba1 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin004_PSO_ALL/thin004.c +++ b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_ALL/thin004.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int a = 0; int x = 0; 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 index 637fb2acbb9..d37c240eba1 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPC/thin004.c +++ b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPC/thin004.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int a = 0; int x = 0; 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 index 637fb2acbb9..d37c240eba1 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin004_TSO_ALL/thin004.c +++ b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_ALL/thin004.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int a = 0; int x = 0; 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 index 637fb2acbb9..d37c240eba1 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPC/thin004.c +++ b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPC/thin004.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int a = 0; int x = 0; 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 index 144fce65ac0..7942733fff0 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin005_PSO_ALL/thin005.c +++ b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_ALL/thin005.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 144fce65ac0..7942733fff0 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPC/thin005.c +++ b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPC/thin005.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 144fce65ac0..7942733fff0 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin005_TSO_ALL/thin005.c +++ b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_ALL/thin005.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index 144fce65ac0..7942733fff0 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPC/thin005.c +++ b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPC/thin005.c @@ -13,13 +13,13 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int x = 0; int y = 0; 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 index d6fc78bee30..b6ad470b92b 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin006_PSO_ALL/thin006.c +++ b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_ALL/thin006.c @@ -13,19 +13,19 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int a = 0; int b = 0; 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 index d6fc78bee30..b6ad470b92b 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPC/thin006.c +++ b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPC/thin006.c @@ -13,19 +13,19 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int a = 0; int b = 0; 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 index d6fc78bee30..b6ad470b92b 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin006_TSO_ALL/thin006.c +++ b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_ALL/thin006.c @@ -13,19 +13,19 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int a = 0; int b = 0; 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 index d6fc78bee30..b6ad470b92b 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPC/thin006.c +++ b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPC/thin006.c @@ -13,19 +13,19 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int __unbuffered_p2_r1 = 0; -int __unbuffered_p2_r3 = 0; +__CPROVER_thread_local int __unbuffered_p2_r3 = 0; int __unbuffered_p2_r4 = 0; int a = 0; int b = 0; 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 index 30a19ffc944..f4a50f8b16b 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin007_PSO_ALL/thin007.c +++ b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_ALL/thin007.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int a = 0; int x = 0; 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 index 30a19ffc944..f4a50f8b16b 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPC/thin007.c +++ b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPC/thin007.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int a = 0; int x = 0; 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 index 30a19ffc944..f4a50f8b16b 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin007_TSO_ALL/thin007.c +++ b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_ALL/thin007.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int a = 0; int x = 0; 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 index 30a19ffc944..f4a50f8b16b 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPC/thin007.c +++ b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPC/thin007.c @@ -13,16 +13,16 @@ void isync() int __unbuffered_cnt = 0; int __unbuffered_p0_r1 = 0; -int __unbuffered_p0_r3 = 0; +__CPROVER_thread_local int __unbuffered_p0_r3 = 0; int __unbuffered_p0_r4 = 0; int __unbuffered_p0_r6 = 0; -int __unbuffered_p0_r7 = 0; +__CPROVER_thread_local int __unbuffered_p0_r7 = 0; int __unbuffered_p0_r8 = 0; int __unbuffered_p1_r1 = 0; -int __unbuffered_p1_r3 = 0; +__CPROVER_thread_local int __unbuffered_p1_r3 = 0; int __unbuffered_p1_r4 = 0; int __unbuffered_p1_r6 = 0; -int __unbuffered_p1_r7 = 0; +__CPROVER_thread_local int __unbuffered_p1_r7 = 0; int __unbuffered_p1_r8 = 0; int a = 0; int x = 0; From f4de8d72dafeffa6eea6af3ec3d9bacab57f4683 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 27 Mar 2026 23:36:39 +0000 Subject: [PATCH 02/11] goto-symex/concurrency: limit unsoundness-abort to dereferencing shared pointers Reading and writing pointers is not not itself unsound, only the interaction with value sets may cause unsound results. Hence, do not reject programs that never dereference a shared pointer. Fixes: #8714 Fixes: #7957 --- regression/book-examples/account/C10.desc | 2 +- regression/cbmc-concurrency/CMakeLists.txt | 2 +- regression/cbmc-concurrency/Makefile | 3 +- .../cbmc-concurrency/dirty_local1/test.desc | 4 +- .../global_pointer1/detect_unsoundness.desc | 8 +++ .../cbmc-concurrency/global_pointer1/main.c | 6 ++ .../global_pointer1/no_deref.desc | 11 ++++ .../global_pointer1/test.desc | 2 +- regression/cbmc-concurrency/malloc1/test.desc | 4 +- regression/cbmc-concurrency/malloc2/test.desc | 4 +- .../thread_chain_posix2/test.desc | 2 +- .../thread_chain_posix3/test.desc | 2 +- regression/cbmc-library/realloc/test_03.desc | 10 +--- src/goto-symex/field_sensitivity.cpp | 55 ++++--------------- src/goto-symex/field_sensitivity.h | 7 +-- src/goto-symex/goto_symex_state.cpp | 8 +-- src/goto-symex/goto_symex_state.h | 3 +- src/goto-symex/symex_assign.cpp | 10 +--- src/goto-symex/symex_dereference.cpp | 42 +++++++++++++- unit/goto-symex/goto_symex_state.cpp | 10 ++-- 20 files changed, 102 insertions(+), 93 deletions(-) create mode 100644 regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc create mode 100644 regression/cbmc-concurrency/global_pointer1/no_deref.desc diff --git a/regression/book-examples/account/C10.desc b/regression/book-examples/account/C10.desc index be2cbd46aa8..174afea2971 100644 --- a/regression/book-examples/account/C10.desc +++ b/regression/book-examples/account/C10.desc @@ -1,4 +1,4 @@ -KNOWNBUG +CORE no-new-smt gcc-only account.c ^EXIT=10$ diff --git a/regression/cbmc-concurrency/CMakeLists.txt b/regression/cbmc-concurrency/CMakeLists.txt index 58bbbe6cdb6..b914944e990 100644 --- a/regression/cbmc-concurrency/CMakeLists.txt +++ b/regression/cbmc-concurrency/CMakeLists.txt @@ -1,4 +1,4 @@ -if((NOT WIN32) AND (NOT APPLE) AND (NOT (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD"))) +if(NOT WIN32) add_test_pl_tests( "$ --validate-goto-model --validate-ssa-equation" ) diff --git a/regression/cbmc-concurrency/Makefile b/regression/cbmc-concurrency/Makefile index 5d828116230..2e444c7c7c6 100644 --- a/regression/cbmc-concurrency/Makefile +++ b/regression/cbmc-concurrency/Makefile @@ -3,9 +3,8 @@ default: tests.log include ../../src/config.inc include ../../src/common -ifeq ($(filter-out OSX MSVC FreeBSD,$(BUILD_ENV_)),) +ifeq ($(filter-out MSVC,$(BUILD_ENV_)),) # no POSIX threads on Windows - # for OSX and FreeBSD we'd need sound handling of pointers in multi-threaded programs no_pthread = -X pthread endif diff --git a/regression/cbmc-concurrency/dirty_local1/test.desc b/regression/cbmc-concurrency/dirty_local1/test.desc index e10a8e8dd2a..17531b29dca 100644 --- a/regression/cbmc-concurrency/dirty_local1/test.desc +++ b/regression/cbmc-concurrency/dirty_local1/test.desc @@ -1,8 +1,8 @@ CORE main.c --no-standard-checks -^EXIT=10$ +pointer handling for concurrency is unsound +^EXIT=6$ ^SIGNAL=0$ -^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc b/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc new file mode 100644 index 00000000000..61c3687e5b6 --- /dev/null +++ b/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc @@ -0,0 +1,8 @@ +CORE pthread +main.c + +pointer handling for concurrency is unsound +^EXIT=6$ +^SIGNAL=0$ +-- +^warning: ignoring diff --git a/regression/cbmc-concurrency/global_pointer1/main.c b/regression/cbmc-concurrency/global_pointer1/main.c index 816fb4605ec..804373650bb 100644 --- a/regression/cbmc-concurrency/global_pointer1/main.c +++ b/regression/cbmc-concurrency/global_pointer1/main.c @@ -7,12 +7,16 @@ int g; void *thread1(void * arg) { v = &g; + return NULL; } void *thread2(void *arg) { assert(v == &g); +#ifndef NO_DEREF *v = 1; +#endif + return NULL; } int main() @@ -26,7 +30,9 @@ int main() pthread_join(t2, 0); assert(v == &g); +#ifndef NO_DEREF assert(*v == 1); +#endif return 0; } diff --git a/regression/cbmc-concurrency/global_pointer1/no_deref.desc b/regression/cbmc-concurrency/global_pointer1/no_deref.desc new file mode 100644 index 00000000000..858ca870a64 --- /dev/null +++ b/regression/cbmc-concurrency/global_pointer1/no_deref.desc @@ -0,0 +1,11 @@ +KNOWNBUG pthread +main.c +-DNO_DEREF +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring +-- +Simplification with value sets causes unsound results despite the absence of +dereferencing. diff --git a/regression/cbmc-concurrency/global_pointer1/test.desc b/regression/cbmc-concurrency/global_pointer1/test.desc index 52168c7eba4..c239dca4b31 100644 --- a/regression/cbmc-concurrency/global_pointer1/test.desc +++ b/regression/cbmc-concurrency/global_pointer1/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +KNOWNBUG pthread main.c ^EXIT=0$ diff --git a/regression/cbmc-concurrency/malloc1/test.desc b/regression/cbmc-concurrency/malloc1/test.desc index 915afae768a..c7d5c894a52 100644 --- a/regression/cbmc-concurrency/malloc1/test.desc +++ b/regression/cbmc-concurrency/malloc1/test.desc @@ -1,8 +1,8 @@ CORE main.c --no-malloc-may-fail -^EXIT=0$ +pointer handling for concurrency is unsound +^EXIT=6$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ -- ^warning: ignoring diff --git a/regression/cbmc-concurrency/malloc2/test.desc b/regression/cbmc-concurrency/malloc2/test.desc index 915afae768a..c7d5c894a52 100644 --- a/regression/cbmc-concurrency/malloc2/test.desc +++ b/regression/cbmc-concurrency/malloc2/test.desc @@ -1,8 +1,8 @@ CORE main.c --no-malloc-may-fail -^EXIT=0$ +pointer handling for concurrency is unsound +^EXIT=6$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ -- ^warning: ignoring diff --git a/regression/cbmc-concurrency/thread_chain_posix2/test.desc b/regression/cbmc-concurrency/thread_chain_posix2/test.desc index 59567af5127..df815ec727a 100644 --- a/regression/cbmc-concurrency/thread_chain_posix2/test.desc +++ b/regression/cbmc-concurrency/thread_chain_posix2/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG pthread +CORE pthread main.c -D_ENABLE_CHAIN_ --unwind 2 ^EXIT=0$ diff --git a/regression/cbmc-concurrency/thread_chain_posix3/test.desc b/regression/cbmc-concurrency/thread_chain_posix3/test.desc index c89f16b63ce..2d9c79b7f48 100644 --- a/regression/cbmc-concurrency/thread_chain_posix3/test.desc +++ b/regression/cbmc-concurrency/thread_chain_posix3/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG pthread +CORE pthread main.c -D_ENABLE_CHAIN_ -D_SANITY_CHECK_ --unwind 2 ^EXIT=10$ diff --git a/regression/cbmc-library/realloc/test_03.desc b/regression/cbmc-library/realloc/test_03.desc index 05129eeb348..d43300d93d6 100644 --- a/regression/cbmc-library/realloc/test_03.desc +++ b/regression/cbmc-library/realloc/test_03.desc @@ -1,12 +1,8 @@ CORE main_03.c - -^EXIT=6$ +--no-malloc-may-fail +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ ^SIGNAL=0$ -pointer handling for concurrency is unsound -- ^warning: ignoring --- -The test uses "__CPROVER_ASYNC_1:" and the async-called function foo does -pointer operations over allocated memory - which is not handled in a sound way -in CBMC. diff --git a/src/goto-symex/field_sensitivity.cpp b/src/goto-symex/field_sensitivity.cpp index 0a5a56b6213..6de0f45dd97 100644 --- a/src/goto-symex/field_sensitivity.cpp +++ b/src/goto-symex/field_sensitivity.cpp @@ -359,15 +359,13 @@ void field_sensitivityt::field_assignments( goto_symex_statet &state, const ssa_exprt &lhs, const exprt &rhs, - symex_targett &target, - bool allow_pointer_unsoundness) const + symex_targett &target) const { const exprt lhs_fs = get_fields(ns, state, lhs, false); if(lhs != lhs_fs) { - field_assignments_rec( - ns, state, lhs_fs, rhs, target, allow_pointer_unsoundness); + field_assignments_rec(ns, state, lhs_fs, rhs, target); // Erase the composite symbol from our working state. Note that we need to // have it in the propagation table and the value set while doing the field // assignments, thus we cannot skip putting it in there above. @@ -388,22 +386,18 @@ void field_sensitivityt::field_assignments( /// \param lhs_fs: expanded symbol /// \param ssa_rhs: right-hand-side value to assign /// \param target: symbolic execution equation store -/// \param allow_pointer_unsoundness: allow pointer unsoundness void field_sensitivityt::field_assignments_rec( const namespacet &ns, goto_symex_statet &state, const exprt &lhs_fs, const exprt &ssa_rhs, - symex_targett &target, - bool allow_pointer_unsoundness) const + symex_targett &target) const { if(is_ssa_expr(lhs_fs)) { const ssa_exprt &l1_lhs = to_ssa_expr(lhs_fs); const ssa_exprt ssa_lhs = - state - .assignment(l1_lhs, ssa_rhs, ns, true, true, allow_pointer_unsoundness) - .get(); + state.assignment(l1_lhs, ssa_rhs, ns, true, true).get(); // do the assignment target.assignment( @@ -454,16 +448,10 @@ void field_sensitivityt::field_assignments_rec( expr_try_dynamic_cast(member_lhs)) { field_assignments_rec( - ns, - state, - fs_ssa->get_object_ssa(), - member_rhs, - target, - allow_pointer_unsoundness); + ns, state, fs_ssa->get_object_ssa(), member_rhs, target); } - field_assignments_rec( - ns, state, member_lhs, member_rhs, target, allow_pointer_unsoundness); + field_assignments_rec(ns, state, member_lhs, member_rhs, target); ++fs_it; } } @@ -499,16 +487,10 @@ void field_sensitivityt::field_assignments_rec( expr_try_dynamic_cast(member_lhs)) { field_assignments_rec( - ns, - state, - fs_ssa->get_object_ssa(), - member_rhs, - target, - allow_pointer_unsoundness); + ns, state, fs_ssa->get_object_ssa(), member_rhs, target); } - field_assignments_rec( - ns, state, member_lhs, member_rhs, target, allow_pointer_unsoundness); + field_assignments_rec(ns, state, member_lhs, member_rhs, target); ++fs_it; } } @@ -540,16 +522,10 @@ void field_sensitivityt::field_assignments_rec( expr_try_dynamic_cast(index_lhs)) { field_assignments_rec( - ns, - state, - fs_ssa->get_object_ssa(), - index_rhs, - target, - allow_pointer_unsoundness); + ns, state, fs_ssa->get_object_ssa(), index_rhs, target); } - field_assignments_rec( - ns, state, index_lhs, index_rhs, target, allow_pointer_unsoundness); + field_assignments_rec(ns, state, index_lhs, index_rhs, target); ++fs_it; } } @@ -565,17 +541,10 @@ void field_sensitivityt::field_assignments_rec( { if(auto fs_ssa = expr_try_dynamic_cast(*fs_it)) { - field_assignments_rec( - ns, - state, - fs_ssa->get_object_ssa(), - op, - target, - allow_pointer_unsoundness); + field_assignments_rec(ns, state, fs_ssa->get_object_ssa(), op, target); } - field_assignments_rec( - ns, state, *fs_it, op, target, allow_pointer_unsoundness); + field_assignments_rec(ns, state, *fs_it, op, target); ++fs_it; } } diff --git a/src/goto-symex/field_sensitivity.h b/src/goto-symex/field_sensitivity.h index 12606321ce0..430c5351da1 100644 --- a/src/goto-symex/field_sensitivity.h +++ b/src/goto-symex/field_sensitivity.h @@ -142,14 +142,12 @@ class field_sensitivityt /// \param rhs: right-hand-side value that was used in the preceding update of /// the full object /// \param target: symbolic execution equation store - /// \param allow_pointer_unsoundness: allow pointer unsoundness void field_assignments( const namespacet &ns, goto_symex_statet &state, const ssa_exprt &lhs, const exprt &rhs, - symex_targett &target, - bool allow_pointer_unsoundness) const; + symex_targett &target) const; /// Turn an expression \p expr into a field-sensitive SSA expression. /// Field-sensitive SSA expressions have individual symbols for each @@ -215,8 +213,7 @@ class field_sensitivityt goto_symex_statet &state, const exprt &lhs_fs, const exprt &ssa_rhs, - symex_targett &target, - bool allow_pointer_unsoundness) const; + symex_targett &target) const; [[nodiscard]] exprt simplify_opt( exprt e, diff --git a/src/goto-symex/goto_symex_state.cpp b/src/goto-symex/goto_symex_state.cpp index 2938600a1c1..6dddece1a92 100644 --- a/src/goto-symex/goto_symex_state.cpp +++ b/src/goto-symex/goto_symex_state.cpp @@ -80,8 +80,7 @@ renamedt goto_symex_statet::assignment( const exprt &rhs, // L2 const namespacet &ns, bool rhs_is_simplified, - bool record_value, - bool allow_pointer_unsoundness) + bool record_value) { // identifier should be l0 or l1, make sure it's l1 lhs = rename_ssa(std::move(lhs), ns).get(); @@ -111,11 +110,6 @@ renamedt goto_symex_statet::assignment( DATA_INVARIANT(!check_renaming(rhs), "rhs renaming failed on l2"); } - // see #305 on GitHub for a simple example and possible discussion - if(is_shared && lhs.type().id() == ID_pointer && !allow_pointer_unsoundness) - throw unsupported_operation_exceptiont( - "pointer handling for concurrency is unsound"); - // Update constant propagation map -- the RHS is L2 if(!is_shared && record_value && goto_symex_can_forward_propagatet(ns)(rhs)) { diff --git a/src/goto-symex/goto_symex_state.h b/src/goto-symex/goto_symex_state.h index 143d12ea485..0ec55457209 100644 --- a/src/goto-symex/goto_symex_state.h +++ b/src/goto-symex/goto_symex_state.h @@ -116,8 +116,7 @@ class goto_symex_statet final : public goto_statet const exprt &rhs, // L2 const namespacet &ns, bool rhs_is_simplified, - bool record_value, - bool allow_pointer_unsoundness = false); + bool record_value); field_sensitivityt field_sensitivity; diff --git a/src/goto-symex/symex_assign.cpp b/src/goto-symex/symex_assign.cpp index 15fd2358236..27fd4b12918 100644 --- a/src/goto-symex/symex_assign.cpp +++ b/src/goto-symex/symex_assign.cpp @@ -217,8 +217,7 @@ void symex_assignt::assign_non_struct_symbol( assignment.rhs, ns, symex_config.simplify_opt, - symex_config.constant_propagation, - symex_config.allow_pointer_unsoundness) + symex_config.constant_propagation) .get(); state.record_events.push(false); @@ -254,12 +253,7 @@ void symex_assignt::assign_non_struct_symbol( { // Split composite symbol lhs into its components state.field_sensitivity.field_assignments( - ns, - state, - l1_lhs, - assignment.rhs, - target, - symex_config.allow_pointer_unsoundness); + ns, state, l1_lhs, assignment.rhs, target); } } diff --git a/src/goto-symex/symex_dereference.cpp b/src/goto-symex/symex_dereference.cpp index 6948502b67e..2008ccc314d 100644 --- a/src/goto-symex/symex_dereference.cpp +++ b/src/goto-symex/symex_dereference.cpp @@ -9,12 +9,11 @@ Author: Daniel Kroening, kroening@kroening.com /// \file /// Symbolic Execution of ANSI-C -#include "goto_symex.h" - #include #include #include #include +#include #include #include #include @@ -23,6 +22,7 @@ Author: Daniel Kroening, kroening@kroening.com #include #include "expr_skeleton.h" +#include "goto_symex.h" #include "path_storage.h" #include "symex_assign.h" #include "symex_dereference_state.h" @@ -249,6 +249,41 @@ goto_symext::cache_dereference(exprt &dereference_result, statet &state) return cache_symbol_expr; } +/// Inspect \p expr to confirm that it can be safely dereferenced even in a +/// concurrent setting. Uses \p ns and \p dirty to identify potentially-shared +/// objects. +static void check_concurrency_soundness( + const exprt &expr, + const incremental_dirtyt &dirty, + const namespacet &ns) +{ + // Make sure we are not trying to dereference a shared pointer, as this may be + // unsound: see #305 on GitHub for a simple example and possible discussion. + for(auto it = expr.depth_cbegin(); it != expr.depth_cend(); /* no ++it */) + { + if(it->id() == ID_address_of) + { + it.next_sibling_or_parent(); + continue; + } + else if(auto sym_expr = expr_try_dynamic_cast(*it)) + { + const irep_idt obj_name = is_ssa_expr(*sym_expr) + ? to_ssa_expr(*sym_expr).get_object_name() + : sym_expr->get_identifier(); + if( + obj_name != goto_symex_statet::guard_identifier() && + (ns.lookup(obj_name).is_shared() || dirty(obj_name))) + { + throw unsupported_operation_exceptiont( + "pointer handling for concurrency is unsound: " + + id2string(obj_name)); + } + } + ++it; + } +} + /// If \p expr is a \ref dereference_exprt, replace it with explicit references /// to the objects it may point to. Otherwise recursively apply this function to /// \p expr's operands, with special cases for address-of (handled by \ref @@ -321,6 +356,9 @@ void goto_symext::dereference_rec( tmp1 = state.field_sensitivity.apply(ns, state, std::move(tmp1), false); + if(state.threads.size() > 1 && !symex_config.allow_pointer_unsoundness) + check_concurrency_soundness(tmp1, path_storage.dirty, ns); + // we need to set up some elaborate call-backs symex_dereference_statet symex_dereference_state(state, ns); diff --git a/unit/goto-symex/goto_symex_state.cpp b/unit/goto-symex/goto_symex_state.cpp index 9042248686e..aab4ccdb8a8 100644 --- a/unit/goto-symex/goto_symex_state.cpp +++ b/unit/goto-symex/goto_symex_state.cpp @@ -65,8 +65,7 @@ SCENARIO( WHEN("Symbol `foo` is assigned constant integer `475`") { const exprt rhs1 = from_integer(475, int_type); - const auto result = - state.assignment(ssa_foo, rhs1, ns, true, true, false); + const auto result = state.assignment(ssa_foo, rhs1, ns, true, true); THEN("The result is `foo` renamed to L2") { REQUIRE(result.get().get_identifier() == "foo!0#1"); @@ -88,8 +87,7 @@ SCENARIO( THEN("Symbol `foo` is assigned another integer 1834") { const exprt rhs2 = from_integer(1834, int_type); - const auto result2 = - state.assignment(ssa_foo, rhs2, ns, true, true, false); + const auto result2 = state.assignment(ssa_foo, rhs2, ns, true, true); THEN("The level 2 index of `foo` is incremented") { @@ -128,7 +126,7 @@ SCENARIO( { const null_pointer_exprt null_pointer{int_pointer_type}; const auto result = - state.assignment(ssa_foo, null_pointer, ns, true, true, false); + state.assignment(ssa_foo, null_pointer, ns, true, true); THEN("The result is `foo` renamed to L2") { REQUIRE(result.get().get_identifier() == "foo!0#1"); @@ -155,7 +153,7 @@ SCENARIO( const address_of_exprt rhs2{int_value}; const renamedt l2_rhs2 = state.rename(rhs2, ns); const auto result2 = - state.assignment(ssa_foo, l2_rhs2.get(), ns, true, true, false); + state.assignment(ssa_foo, l2_rhs2.get(), ns, true, true); THEN("The level 2 index of `foo` is incremented") { From c091a62f63ea6f6d05e204f50181bd1c8b2f1d44 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 27 Mar 2026 23:36:39 +0000 Subject: [PATCH 03/11] Do not use value-set supported simplification with multiple threads Shared pointers may be updated in yet-to-be-executed threads. --- .../cbmc-concurrency/global_pointer1/no_deref.desc | 5 +---- src/goto-symex/goto_symex.cpp | 13 ++++++++++--- src/goto-symex/goto_symex.h | 2 +- src/goto-symex/symex_atomic_section.cpp | 4 ++-- src/goto-symex/symex_builtin_functions.cpp | 8 ++++---- src/goto-symex/symex_clean_expr.cpp | 4 ++-- src/goto-symex/symex_dereference.cpp | 8 ++++---- src/goto-symex/symex_goto.cpp | 2 +- src/goto-symex/symex_main.cpp | 10 +++++----- src/goto-symex/symex_other.cpp | 6 +++--- 10 files changed, 33 insertions(+), 29 deletions(-) diff --git a/regression/cbmc-concurrency/global_pointer1/no_deref.desc b/regression/cbmc-concurrency/global_pointer1/no_deref.desc index 858ca870a64..74bc0aa6484 100644 --- a/regression/cbmc-concurrency/global_pointer1/no_deref.desc +++ b/regression/cbmc-concurrency/global_pointer1/no_deref.desc @@ -1,4 +1,4 @@ -KNOWNBUG pthread +CORE pthread main.c -DNO_DEREF ^EXIT=0$ @@ -6,6 +6,3 @@ main.c ^VERIFICATION SUCCESSFUL$ -- ^warning: ignoring --- -Simplification with value sets causes unsound results despite the absence of -dereferencing. diff --git a/src/goto-symex/goto_symex.cpp b/src/goto-symex/goto_symex.cpp index 24d9e4dc33b..0c0efb5106a 100644 --- a/src/goto-symex/goto_symex.cpp +++ b/src/goto-symex/goto_symex.cpp @@ -18,6 +18,7 @@ Author: Daniel Kroening, kroening@kroening.com #include #include #include +#include #include #include #include @@ -29,11 +30,17 @@ Author: Daniel Kroening, kroening@kroening.com #include -void goto_symext::do_simplify(exprt &expr, const value_sett &value_set) +void goto_symext::do_simplify(exprt &expr, const statet &state) { if(symex_config.simplify_opt) { - simplify_expr_with_value_sett{value_set, language_mode, ns}.simplify(expr); + if(state.threads.size() == 1) + { + simplify_expr_with_value_sett{state.value_set, language_mode, ns} + .simplify(expr); + } + else + simplify(expr, ns); } } @@ -63,7 +70,7 @@ void goto_symext::symex_assign( // "byte_extract from an_lvalue offset this_rvalue") can affect whether // we use field-sensitive symbols or not, so L2-rename them up front: lhs = state.l2_rename_rvalues(lhs, ns); - do_simplify(lhs, state.value_set); + do_simplify(lhs, state); lhs = state.field_sensitivity.apply(ns, state, std::move(lhs), true); if(rhs.id() == ID_side_effect) diff --git a/src/goto-symex/goto_symex.h b/src/goto-symex/goto_symex.h index 5980573f0cd..2c36ef7e14c 100644 --- a/src/goto-symex/goto_symex.h +++ b/src/goto-symex/goto_symex.h @@ -526,7 +526,7 @@ class goto_symext /// \param state: Symbolic execution state for current instruction void symex_catch(statet &state); - virtual void do_simplify(exprt &expr, const value_sett &value_set); + virtual void do_simplify(exprt &expr, const statet &state); /// Symbolically execute an ASSIGN instruction or simulate such an execution /// for a synthetic assignment diff --git a/src/goto-symex/symex_atomic_section.cpp b/src/goto-symex/symex_atomic_section.cpp index 231c40303e7..45ee547abb6 100644 --- a/src/goto-symex/symex_atomic_section.cpp +++ b/src/goto-symex/symex_atomic_section.cpp @@ -58,7 +58,7 @@ void goto_symext::symex_atomic_end(statet &state) ++it) read_guard|=*it; exprt read_guard_expr=read_guard.as_expr(); - do_simplify(read_guard_expr, state.value_set); + do_simplify(read_guard_expr, state); target.shared_read( read_guard_expr, @@ -80,7 +80,7 @@ void goto_symext::symex_atomic_end(statet &state) ++it) write_guard|=*it; exprt write_guard_expr=write_guard.as_expr(); - do_simplify(write_guard_expr, state.value_set); + do_simplify(write_guard_expr, state); target.shared_write( write_guard_expr, diff --git a/src/goto-symex/symex_builtin_functions.cpp b/src/goto-symex/symex_builtin_functions.cpp index 0ffc7b606f6..c31bc0eab4d 100644 --- a/src/goto-symex/symex_builtin_functions.cpp +++ b/src/goto-symex/symex_builtin_functions.cpp @@ -293,7 +293,7 @@ void goto_symext::symex_va_start( array = clean_expr(std::move(array), state, false); array = state.rename(std::move(array), ns).get(); - do_simplify(array, state.value_set); + do_simplify(array, state); symex_assign(state, va_array.symbol_expr(), std::move(array)); exprt rhs = address_of_exprt{index_exprt{ @@ -388,7 +388,7 @@ void goto_symext::symex_printf( exprt tmp_rhs = rhs; clean_expr(tmp_rhs, state, false); tmp_rhs = state.rename(std::move(tmp_rhs), ns).get(); - do_simplify(tmp_rhs, state.value_set); + do_simplify(tmp_rhs, state); const exprt::operandst &operands=tmp_rhs.operands(); std::list args; @@ -426,7 +426,7 @@ void goto_symext::symex_printf( parameter = to_address_of_expr(parameter).object(); clean_expr(parameter, state, false); parameter = state.rename(std::move(parameter), ns).get(); - do_simplify(parameter, state.value_set); + do_simplify(parameter, state); args.push_back(std::move(parameter)); } @@ -454,7 +454,7 @@ void goto_symext::symex_input( for(std::size_t i=1; i(tmp1, ns).get(); - do_simplify(tmp1, state.value_set); + do_simplify(tmp1, state); if(symex_config.run_validation_checks) { @@ -553,7 +553,7 @@ void goto_symext::dereference(exprt &expr, statet &state, bool write) // when all we need is // s1 := s1 with (member := X) [and guard b] // s2 := s2 with (member := X) [and guard !b] - do_simplify(expr, state.value_set); + do_simplify(expr, state); if(symex_config.run_validation_checks) { diff --git a/src/goto-symex/symex_goto.cpp b/src/goto-symex/symex_goto.cpp index b61e48f36a5..2f9dcddf728 100644 --- a/src/goto-symex/symex_goto.cpp +++ b/src/goto-symex/symex_goto.cpp @@ -119,7 +119,7 @@ void goto_symext::symex_goto(statet &state) // generate assume(false) or a suitable negation if this // instruction is a conditional goto exprt negated_guard = boolean_negate(new_guard); - do_simplify(negated_guard, state.value_set); + do_simplify(negated_guard, state); log.statistics() << "replacing self-loop at " << state.source.pc->source_location() << " by assume(" << from_expr(ns, state.source.function_id, negated_guard) diff --git a/src/goto-symex/symex_main.cpp b/src/goto-symex/symex_main.cpp index a6ca641f16e..fe4e59497f9 100644 --- a/src/goto-symex/symex_main.cpp +++ b/src/goto-symex/symex_main.cpp @@ -157,7 +157,7 @@ void goto_symext::symex_assert( // First, push negations in and perhaps convert existential quantifiers into // universals: if(has_subexpr(condition, ID_exists) || has_subexpr(condition, ID_forall)) - do_simplify(condition, state.value_set); + do_simplify(condition, state); // Second, L2-rename universal quantifiers: if(has_subexpr(condition, ID_forall)) @@ -167,7 +167,7 @@ void goto_symext::symex_assert( exprt l2_condition = state.rename(std::move(condition), ns).get(); // now try simplifier on it - do_simplify(l2_condition, state.value_set); + do_simplify(l2_condition, state); std::string msg = id2string(instruction.source_location().get_comment()); if(msg.empty()) @@ -200,7 +200,7 @@ void goto_symext::symex_assume(statet &state, const exprt &cond) { exprt simplified_cond = clean_expr(cond, state, false); simplified_cond = state.rename(std::move(simplified_cond), ns).get(); - do_simplify(simplified_cond, state.value_set); + do_simplify(simplified_cond, state); // It would be better to call try_filter_value_sets after apply_condition, // but it is not currently possible. See the comment at the beginning of @@ -848,13 +848,13 @@ void goto_symext::try_filter_value_sets( // without another round of constant propagation. // It would be sufficient to replace this call to do_simplify() with // something that just replaces `*&x` with `x` whenever it finds it. - do_simplify(modified_condition, state.value_set); + do_simplify(modified_condition, state); state.record_events.push(false); modified_condition = state.rename(std::move(modified_condition), ns).get(); state.record_events.pop(); - do_simplify(modified_condition, state.value_set); + do_simplify(modified_condition, state); if(jump_taken_value_set && modified_condition == false) { diff --git a/src/goto-symex/symex_other.cpp b/src/goto-symex/symex_other.cpp index c5e046356bf..ee55abf9273 100644 --- a/src/goto-symex/symex_other.cpp +++ b/src/goto-symex/symex_other.cpp @@ -151,14 +151,14 @@ void goto_symext::symex_other( { src_array = make_byte_extract( src_array, from_integer(0, c_index_type()), dest_array.type()); - do_simplify(src_array, state.value_set); + do_simplify(src_array, state); } else { // ID_array_replace dest_array = make_byte_extract( dest_array, from_integer(0, c_index_type()), src_array.type()); - do_simplify(dest_array, state.value_set); + do_simplify(dest_array, state); } } @@ -197,7 +197,7 @@ void goto_symext::symex_other( { auto array_size = size_of_expr(array_expr.type(), ns); CHECK_RETURN(array_size.has_value()); - do_simplify(array_size.value(), state.value_set); + do_simplify(array_size.value(), state); array_expr = make_byte_extract( array_expr, from_integer(0, c_index_type()), From 0cfdfa8489f9a0d2511d55b693c30762280c46e5 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 27 Mar 2026 23:36:39 +0000 Subject: [PATCH 04/11] feat: create may-alias objects for shared pointer dereferences in concurrent context Instead of throwing unsupported_operation_exceptiont when a shared pointer is dereferenced in a multi-threaded context, create a fresh concurrency::may_alias symbol of the appropriate pointed-to type. This symbol bypasses the value-set dereference and serves as a placeholder for the memory model to later create conditional aliasing constraints. Changes: - Add may_alias_pointer field and is_may_alias() helper to SSA_stept - Transform check_concurrency_soundness into find_shared_pointer_in_dereference which returns the shared symbol instead of throwing - In dereference_rec, when a shared pointer is detected, create a fresh may-alias symbol via get_fresh_aux_symbol and annotate it with the source pointer expression - Update regression tests that expected the old exception message --- .../cbmc-concurrency/dirty_local1/test.desc | 5 +- .../global_pointer1/detect_unsoundness.desc | 5 +- regression/cbmc-concurrency/malloc1/test.desc | 5 +- regression/cbmc-concurrency/malloc2/test.desc | 5 +- src/goto-symex/ssa_step.h | 11 +++++ src/goto-symex/symex_dereference.cpp | 49 +++++++++++++++---- 6 files changed, 62 insertions(+), 18 deletions(-) diff --git a/regression/cbmc-concurrency/dirty_local1/test.desc b/regression/cbmc-concurrency/dirty_local1/test.desc index 17531b29dca..1e223d3821e 100644 --- a/regression/cbmc-concurrency/dirty_local1/test.desc +++ b/regression/cbmc-concurrency/dirty_local1/test.desc @@ -1,8 +1,9 @@ CORE main.c --no-standard-checks -pointer handling for concurrency is unsound -^EXIT=6$ +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ ^SIGNAL=0$ -- ^warning: ignoring +pointer handling for concurrency is unsound diff --git a/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc b/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc index 61c3687e5b6..ffd11192f5b 100644 --- a/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc +++ b/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc @@ -1,8 +1,9 @@ CORE pthread main.c -pointer handling for concurrency is unsound -^EXIT=6$ +^VERIFICATION FAILED$ +^EXIT=10$ ^SIGNAL=0$ -- ^warning: ignoring +pointer handling for concurrency is unsound diff --git a/regression/cbmc-concurrency/malloc1/test.desc b/regression/cbmc-concurrency/malloc1/test.desc index c7d5c894a52..38cc5dade1f 100644 --- a/regression/cbmc-concurrency/malloc1/test.desc +++ b/regression/cbmc-concurrency/malloc1/test.desc @@ -1,8 +1,9 @@ CORE main.c --no-malloc-may-fail -pointer handling for concurrency is unsound -^EXIT=6$ +^VERIFICATION FAILED$ +^EXIT=10$ ^SIGNAL=0$ -- ^warning: ignoring +pointer handling for concurrency is unsound diff --git a/regression/cbmc-concurrency/malloc2/test.desc b/regression/cbmc-concurrency/malloc2/test.desc index c7d5c894a52..38cc5dade1f 100644 --- a/regression/cbmc-concurrency/malloc2/test.desc +++ b/regression/cbmc-concurrency/malloc2/test.desc @@ -1,8 +1,9 @@ CORE main.c --no-malloc-may-fail -pointer handling for concurrency is unsound -^EXIT=6$ +^VERIFICATION FAILED$ +^EXIT=10$ ^SIGNAL=0$ -- ^warning: ignoring +pointer handling for concurrency is unsound diff --git a/src/goto-symex/ssa_step.h b/src/goto-symex/ssa_step.h index bdb0f794aa3..1be1d124643 100644 --- a/src/goto-symex/ssa_step.h +++ b/src/goto-symex/ssa_step.h @@ -165,6 +165,16 @@ class SSA_stept // for function calls std::vector ssa_function_arguments, converted_function_arguments; + // For may-alias objects created during concurrent pointer dereferencing: + // records the pointer expression that this may-alias object was created for. + // Empty (nil) for regular events. + exprt may_alias_pointer; + + bool is_may_alias() const + { + return may_alias_pointer.is_not_nil(); + } + // for SHARED_READ/SHARED_WRITE and ATOMIC_BEGIN/ATOMIC_END unsigned atomic_section_id = 0; @@ -190,6 +200,7 @@ class SSA_stept cond_expr(static_cast(get_nil_irep())), cond_handle(false_exprt()), formatted(false), + may_alias_pointer(static_cast(get_nil_irep())), atomic_section_id(0), ignore(false) { diff --git a/src/goto-symex/symex_dereference.cpp b/src/goto-symex/symex_dereference.cpp index 7535cf93c6c..52ec5b99d33 100644 --- a/src/goto-symex/symex_dereference.cpp +++ b/src/goto-symex/symex_dereference.cpp @@ -19,6 +19,8 @@ Author: Daniel Kroening, kroening@kroening.com #include #include +#include + #include #include "expr_skeleton.h" @@ -249,16 +251,15 @@ goto_symext::cache_dereference(exprt &dereference_result, statet &state) return cache_symbol_expr; } -/// Inspect \p expr to confirm that it can be safely dereferenced even in a -/// concurrent setting. Uses \p ns and \p dirty to identify potentially-shared -/// objects. -static void check_concurrency_soundness( +/// Check whether the pointer expression used for dereferencing involves +/// shared state. If it does, return the first shared symbol found. +/// Uses \p ns and \p dirty to identify potentially-shared objects. +/// \return The shared symbol expression if found, empty optional otherwise. +static std::optional find_shared_pointer_in_dereference( const exprt &expr, const incremental_dirtyt &dirty, const namespacet &ns) { - // Make sure we are not trying to dereference a shared pointer, as this may be - // unsound: see #305 on GitHub for a simple example and possible discussion. for(auto it = expr.depth_cbegin(); it != expr.depth_cend(); /* no ++it */) { if(it->id() == ID_address_of) @@ -275,13 +276,13 @@ static void check_concurrency_soundness( obj_name != goto_symex_statet::guard_identifier() && (ns.lookup(obj_name).is_shared() || dirty(obj_name))) { - throw unsupported_operation_exceptiont( - "pointer handling for concurrency is unsound: " + - id2string(obj_name)); + return *sym_expr; } } ++it; } + + return {}; } /// If \p expr is a \ref dereference_exprt, replace it with explicit references @@ -356,8 +357,36 @@ void goto_symext::dereference_rec( tmp1 = state.field_sensitivity.apply(ns, state, std::move(tmp1), false); + // In multi-threaded mode, if the pointer expression involves shared state, + // bypass value-set dereference and create a fresh may-alias object instead. if(state.threads.size() > 1 && !symex_config.allow_pointer_unsoundness) - check_concurrency_soundness(tmp1, path_storage.dirty, ns); + { + auto shared_sym = find_shared_pointer_in_dereference( + tmp1, path_storage.dirty, ns); + if(shared_sym.has_value()) + { + // Create a fresh symbol to represent what the shared pointer may + // point to. The type is the pointed-to type (i.e. the type of the + // dereference expression itself). + symbolt &may_alias_symbol = get_fresh_aux_symbol( + expr.type(), + "concurrency", + "may_alias", + state.source.pc->source_location(), + language_mode, + state.symbol_table); + may_alias_symbol.is_thread_local = false; + may_alias_symbol.is_file_local = false; + + // Store the source pointer as an annotation on the symbol expression + // so the memory model can later create conditional aliasing constraints. + symbol_exprt result_expr = may_alias_symbol.symbol_expr(); + result_expr.set(ID_C_class, tmp1); + + expr = std::move(result_expr); + return; + } + } // we need to set up some elaborate call-backs symex_dereference_statet symex_dereference_state(state, ns); From e6cd4e6c3ab51bb2dca226801158fe59548a3dcd Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 27 Mar 2026 23:36:39 +0000 Subject: [PATCH 05/11] feat: add alias-aware partial-order constraints for may-alias concurrency events Modify the partial-order constraint generation to account for may-alias objects created during shared pointer dereferences in concurrent context. Key changes: - Store source pointer on symbolt::value instead of ID_C_class annotation so it survives SSA renaming (lookup by object name from symbol table) - In build_event_lists, add a second pass that distributes may-alias events to all type-compatible non-may-alias addresses in the address_map - Record address representatives (L1 ssa_exprt) for building alias conditions - Add alias_condition() method that builds pointer_object equality between the source pointer and address-of the target object - Guard write_serialization_external constraints with alias conditions - Guard read_from constraints with alias conditions (passed through to register_read_from_choice_symbol) - Guard from_read constraints with alias conditions - Skip init writes for may-alias addresses (their semantics are captured by aliasing constraints, not initialization) - Update regression test expectations for dirty_local1, malloc1, and global_pointer1/detect_unsoundness to reflect correct analysis results --- .../cbmc-concurrency/dirty_local1/test.desc | 4 +- .../global_pointer1/detect_unsoundness.desc | 4 +- regression/cbmc-concurrency/malloc1/test.desc | 4 +- src/goto-symex/memory_model.cpp | 13 ++- src/goto-symex/memory_model.h | 4 +- src/goto-symex/memory_model_sc.cpp | 38 +++++- src/goto-symex/partial_order_concurrency.cpp | 108 +++++++++++++++++- src/goto-symex/partial_order_concurrency.h | 9 ++ src/goto-symex/symex_dereference.cpp | 9 +- 9 files changed, 173 insertions(+), 20 deletions(-) diff --git a/regression/cbmc-concurrency/dirty_local1/test.desc b/regression/cbmc-concurrency/dirty_local1/test.desc index 1e223d3821e..5cb4c772c88 100644 --- a/regression/cbmc-concurrency/dirty_local1/test.desc +++ b/regression/cbmc-concurrency/dirty_local1/test.desc @@ -1,8 +1,8 @@ CORE main.c --no-standard-checks -^VERIFICATION SUCCESSFUL$ -^EXIT=0$ +^VERIFICATION FAILED$ +^EXIT=10$ ^SIGNAL=0$ -- ^warning: ignoring diff --git a/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc b/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc index ffd11192f5b..4026199c97a 100644 --- a/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc +++ b/regression/cbmc-concurrency/global_pointer1/detect_unsoundness.desc @@ -1,8 +1,8 @@ CORE pthread main.c -^VERIFICATION FAILED$ -^EXIT=10$ +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ ^SIGNAL=0$ -- ^warning: ignoring diff --git a/regression/cbmc-concurrency/malloc1/test.desc b/regression/cbmc-concurrency/malloc1/test.desc index 38cc5dade1f..2a6c5537fb8 100644 --- a/regression/cbmc-concurrency/malloc1/test.desc +++ b/regression/cbmc-concurrency/malloc1/test.desc @@ -1,8 +1,8 @@ CORE main.c --no-malloc-may-fail -^VERIFICATION FAILED$ -^EXIT=10$ +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ ^SIGNAL=0$ -- ^warning: ignoring diff --git a/src/goto-symex/memory_model.cpp b/src/goto-symex/memory_model.cpp index 9059b669b1c..3e906f2f1df 100644 --- a/src/goto-symex/memory_model.cpp +++ b/src/goto-symex/memory_model.cpp @@ -50,6 +50,8 @@ void memory_model_baset::read_from(symex_target_equationt &equation) { for(const auto &read_event : address.second.reads) { + exprt read_alias = alias_condition(read_event, address.first); + exprt::operandst rf_choice_symbols; rf_choice_symbols.reserve(address.second.writes.size()); @@ -59,8 +61,11 @@ void memory_model_baset::read_from(symex_target_equationt &equation) // rf cannot contradict program order if(!po(read_event, write_event)) { + exprt write_alias = alias_condition(write_event, address.first); + exprt alias_cond = conjunction({read_alias, write_alias}); + rf_choice_symbols.push_back(register_read_from_choice_symbol( - read_event, write_event, equation)); + read_event, write_event, equation, alias_cond)); } } @@ -83,7 +88,8 @@ void memory_model_baset::read_from(symex_target_equationt &equation) symbol_exprt memory_model_baset::register_read_from_choice_symbol( const event_it &r, const event_it &w, - symex_target_equationt &equation) + symex_target_equationt &equation, + const exprt &alias_cond) { symbol_exprt s = nondet_bool_symbol("rf"); @@ -97,7 +103,8 @@ symbol_exprt memory_model_baset::register_read_from_choice_symbol( equation, // We rely on the fact that there is at least // one write event that has guard 'true'. - implies_exprt{s, and_exprt{w->guard, equal_exprt{r->ssa_lhs, w->ssa_lhs}}}, + implies_exprt{ + s, and_exprt{alias_cond, w->guard, equal_exprt{r->ssa_lhs, w->ssa_lhs}}}, is_rfi ? "rfi" : "rf", r->source); diff --git a/src/goto-symex/memory_model.h b/src/goto-symex/memory_model.h index eb4cad75753..5f52a31b465 100644 --- a/src/goto-symex/memory_model.h +++ b/src/goto-symex/memory_model.h @@ -50,11 +50,13 @@ class memory_model_baset : public partial_order_concurrencyt /// \param r: read event /// \param w: write event /// \param equation: symex equation where the new constraints should be added + /// \param alias_cond: additional alias condition guard (default: true) /// \return the new choice symbol symbol_exprt register_read_from_choice_symbol( const event_it &r, const event_it &w, - symex_target_equationt &equation); + symex_target_equationt &equation, + const exprt &alias_cond = true_exprt{}); // maps thread numbers to an event list typedef std::map per_thread_mapt; diff --git a/src/goto-symex/memory_model_sc.cpp b/src/goto-symex/memory_model_sc.cpp index 8c7d5fa964f..867d8107b82 100644 --- a/src/goto-symex/memory_model_sc.cpp +++ b/src/goto-symex/memory_model_sc.cpp @@ -228,18 +228,24 @@ void memory_model_sct::write_serialization_external( // ws is a total order, no two elements have the same rank // s -> w_evt1 before w_evt2; !s -> w_evt2 before w_evt1 + // Guard with alias conditions for may-alias events + exprt alias1 = alias_condition(*w_it1, a_it->first); + exprt alias2 = alias_condition(*w_it2, a_it->first); + exprt alias_guard = conjunction({alias1, alias2}); + symbol_exprt s=nondet_bool_symbol("ws-ext"); // write-to-write edge add_constraint( equation, - implies_exprt(s, before(*w_it1, *w_it2)), + implies_exprt(and_exprt(alias_guard, s), before(*w_it1, *w_it2)), "ws-ext", (*w_it1)->source); add_constraint( equation, - implies_exprt(not_exprt(s), before(*w_it2, *w_it1)), + implies_exprt( + and_exprt(alias_guard, not_exprt(s)), before(*w_it2, *w_it1)), "ws-ext", (*w_it1)->source); } @@ -306,24 +312,48 @@ void memory_model_sct::from_read(symex_target_equationt &equation) { exprt fr=before(r, *w); + // Alias conditions for the involved events + exprt r_alias = alias_condition(r, a_it->first); + exprt w_prime_alias = alias_condition(*w_prime, a_it->first); + exprt w_alias = alias_condition(*w, a_it->first); + // the guard of w_prime follows from rf; with rfi // optimisation such as the previous write_symbol_primed // it would even be wrong to add this guard cond= implies_exprt( - and_exprt(r->guard, (*w)->guard, ws1, rf), + conjunction({ + r->guard, + (*w)->guard, + ws1, + rf, + r_alias, + w_prime_alias, + w_alias}), fr); } else if(c_it->first.second == *w && ws2 != false) { exprt fr=before(r, *w_prime); + // Alias conditions for the involved events + exprt r_alias = alias_condition(r, a_it->first); + exprt w_alias = alias_condition(*w, a_it->first); + exprt w_prime_alias = alias_condition(*w_prime, a_it->first); + // the guard of w follows from rf; with rfi // optimisation such as the previous write_symbol_primed // it would even be wrong to add this guard cond= implies_exprt( - and_exprt(r->guard, (*w_prime)->guard, ws2, rf), + conjunction({ + r->guard, + (*w_prime)->guard, + ws2, + rf, + r_alias, + w_alias, + w_prime_alias}), fr); } diff --git a/src/goto-symex/partial_order_concurrency.cpp b/src/goto-symex/partial_order_concurrency.cpp index 60bf293ef2f..729283abfb2 100644 --- a/src/goto-symex/partial_order_concurrency.cpp +++ b/src/goto-symex/partial_order_concurrency.cpp @@ -13,7 +13,11 @@ Author: Michael Tautschnig, michael.tautschnig@cs.ox.ac.uk #include #include +#include +#include +#include #include +#include partial_order_concurrencyt::partial_order_concurrencyt( const namespacet &_ns):ns(_ns) @@ -51,6 +55,16 @@ void partial_order_concurrencyt::add_init_writes( if(init_done.find(a)!=init_done.end()) continue; + // Skip may-alias addresses -- their initialization is handled through + // the aliasing constraints in the memory model, not through init writes. + const irep_idt &obj_name = e_it->ssa_lhs.get_object_name(); + if( + id2string(obj_name).find("concurrency::may_alias") != std::string::npos) + { + init_done.insert(a); + continue; + } + if(spawn_seen || e_it->is_shared_read() || e_it->guard != true) { init_steps.emplace_back( @@ -91,12 +105,23 @@ void partial_order_concurrencyt::build_event_lists( if(!e_it->is_spawn()) { - a_rect &a_rec=address_map[address(e_it)]; + const irep_idt &addr = address(e_it); + a_rect &a_rec=address_map[addr]; if(e_it->is_shared_read()) a_rec.reads.push_back(e_it); else // must be write a_rec.writes.push_back(e_it); + + // Record a representative L1 symbol for non-may-alias addresses + const irep_idt &obj_name = e_it->ssa_lhs.get_object_name(); + if( + id2string(obj_name).find("concurrency::may_alias") == + std::string::npos && + address_representatives.find(addr) == address_representatives.end()) + { + address_representatives.emplace(addr, remove_level_2(e_it->ssa_lhs)); + } } // maps an event id to a per-thread counter @@ -105,6 +130,52 @@ void partial_order_concurrencyt::build_event_lists( } } + // Second pass: for each may-alias event, add it to all non-may-alias + // addresses' read/write lists so it participates in their constraints. + // Only add to addresses where the base type is compatible. + for(eventst::const_iterator + e_it=equation.SSA_steps.begin(); + e_it!=equation.SSA_steps.end(); + e_it++) + { + if(!e_it->is_shared_read() && !e_it->is_shared_write()) + continue; + + const irep_idt &obj_name = e_it->ssa_lhs.get_object_name(); + if( + id2string(obj_name).find("concurrency::may_alias") == std::string::npos) + continue; + + const typet &may_alias_type = e_it->ssa_lhs.type(); + + // This is a may-alias event -- add it to all other non-may-alias addresses + for(auto &addr_entry : address_map) + { + // Skip the may-alias object's own address entry + if(addr_entry.first == address(e_it)) + continue; + + // Skip other may-alias addresses + if( + id2string(addr_entry.first).find("concurrency::may_alias") != + std::string::npos) + continue; + + // Only add to addresses with matching type to avoid type mismatches + // in value equality constraints + auto rep_it = address_representatives.find(addr_entry.first); + if(rep_it == address_representatives.end()) + continue; + if(rep_it->second.type() != may_alias_type) + continue; + + if(e_it->is_shared_read()) + addr_entry.second.reads.push_back(e_it); + else + addr_entry.second.writes.push_back(e_it); + } + } + messaget log{message_handler}; for(address_mapt::const_iterator a_it=address_map.begin(); @@ -208,3 +279,38 @@ void partial_order_concurrencyt::add_constraint( equation.constraint(tmp, msg, source); } + +exprt partial_order_concurrencyt::alias_condition( + event_it event, + const irep_idt &target_address) const +{ + const irep_idt &obj_name = event->ssa_lhs.get_object_name(); + if( + id2string(obj_name).find("concurrency::may_alias") == std::string::npos) + return true_exprt{}; + + // Look up the source pointer from the symbol table via the object name + const symbolt *sym_ptr; + if(ns.lookup(obj_name, sym_ptr) || sym_ptr->value.is_nil()) + return true_exprt{}; + + const exprt &source_pointer = sym_ptr->value; + + // Find a representative non-may-alias event at the target address to build + // the address-of expression for comparison. + auto rep_it = address_representatives.find(target_address); + if(rep_it == address_representatives.end()) + return true_exprt{}; + + const ssa_exprt &target_l1_sym = rep_it->second; + + // Build: pointer_object(source_pointer) == pointer_object(&target) + const typet po_type = + unsignedbv_typet{config.bv_encoding.object_bits}; + + address_of_exprt target_addr(target_l1_sym); + + return equal_exprt{ + pointer_object_exprt{source_pointer, po_type}, + pointer_object_exprt{target_addr, po_type}}; +} diff --git a/src/goto-symex/partial_order_concurrency.h b/src/goto-symex/partial_order_concurrency.h index 3e48c8cfd1b..7b5aae41dc9 100644 --- a/src/goto-symex/partial_order_concurrency.h +++ b/src/goto-symex/partial_order_concurrency.h @@ -58,6 +58,15 @@ class partial_order_concurrencyt typedef std::map address_mapt; address_mapt address_map; + // For each address, store the L1 ssa_exprt of a representative + // non-may-alias event (used to build alias conditions). + typedef std::map address_representativet; + address_representativet address_representatives; + + /// For a may-alias event, return the condition under which it aliases + /// with the given address. For non-may-alias events, return true. + exprt alias_condition(event_it event, const irep_idt &target_address) const; + /// First call \ref add_init_writes then for each shared read/write (or /// spawn) populate: /// 1) the _address_map_ (with a list of reads/writes for the address of each diff --git a/src/goto-symex/symex_dereference.cpp b/src/goto-symex/symex_dereference.cpp index 52ec5b99d33..e54536fadf0 100644 --- a/src/goto-symex/symex_dereference.cpp +++ b/src/goto-symex/symex_dereference.cpp @@ -378,12 +378,11 @@ void goto_symext::dereference_rec( may_alias_symbol.is_thread_local = false; may_alias_symbol.is_file_local = false; - // Store the source pointer as an annotation on the symbol expression - // so the memory model can later create conditional aliasing constraints. - symbol_exprt result_expr = may_alias_symbol.symbol_expr(); - result_expr.set(ID_C_class, tmp1); + // Store the source pointer on the symbol's value field so the memory + // model can later look it up to create conditional aliasing constraints. + may_alias_symbol.value = tmp1; - expr = std::move(result_expr); + expr = may_alias_symbol.symbol_expr(); return; } } From 6ac74310fa34ea51a85f05aadf599888e7b64cb1 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 27 Mar 2026 23:36:39 +0000 Subject: [PATCH 06/11] feat: add may-alias regression tests for concurrent pointer dereference Add three new regression tests exercising the may-alias object creation and constraint generation for shared pointer dereferences: - may_alias1: Tests the issue example (allocator pattern with __CPROVER_allocate). Verifies VERIFICATION SUCCESSFUL with proper synchronization via assumes. - may_alias2: Tests reading through a shared pointer where another thread writes the value and sets the pointer. Verifies no exception is thrown. - may_alias3: Tests a case where another thread changes a shared pointer to point to a different object. Verifies no exception and the old 'unsound' message does not appear. All three tests verify that the old 'pointer handling for concurrency is unsound' exception no longer occurs. --- regression/cbmc-concurrency/may_alias1/main.c | 13 ++++++++++++ .../cbmc-concurrency/may_alias1/test.desc | 9 +++++++++ regression/cbmc-concurrency/may_alias2/main.c | 19 ++++++++++++++++++ .../cbmc-concurrency/may_alias2/test.desc | 8 ++++++++ regression/cbmc-concurrency/may_alias3/main.c | 20 +++++++++++++++++++ .../cbmc-concurrency/may_alias3/test.desc | 8 ++++++++ 6 files changed, 77 insertions(+) create mode 100644 regression/cbmc-concurrency/may_alias1/main.c create mode 100644 regression/cbmc-concurrency/may_alias1/test.desc create mode 100644 regression/cbmc-concurrency/may_alias2/main.c create mode 100644 regression/cbmc-concurrency/may_alias2/test.desc create mode 100644 regression/cbmc-concurrency/may_alias3/main.c create mode 100644 regression/cbmc-concurrency/may_alias3/test.desc diff --git a/regression/cbmc-concurrency/may_alias1/main.c b/regression/cbmc-concurrency/may_alias1/main.c new file mode 100644 index 00000000000..fa3c68ac184 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias1/main.c @@ -0,0 +1,13 @@ +int *object; +_Bool create_object; +void allocator(void) { + __CPROVER_assume(create_object); + object = __CPROVER_allocate(sizeof(int), 1); + create_object = 0; +} +int main() { + __CPROVER_ASYNC_1: allocator(); + create_object = 1; + __CPROVER_assume(create_object == 0); + *object = 42; +} diff --git a/regression/cbmc-concurrency/may_alias1/test.desc b/regression/cbmc-concurrency/may_alias1/test.desc new file mode 100644 index 00000000000..89da33633c8 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias1/test.desc @@ -0,0 +1,9 @@ +CORE +main.c +--no-malloc-may-fail +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring diff --git a/regression/cbmc-concurrency/may_alias2/main.c b/regression/cbmc-concurrency/may_alias2/main.c new file mode 100644 index 00000000000..c0a5873443b --- /dev/null +++ b/regression/cbmc-concurrency/may_alias2/main.c @@ -0,0 +1,19 @@ +#include + +int *ptr; +int val; +_Bool done; + +void writer(void) +{ + val = 42; + ptr = &val; + done = 1; +} + +int main(void) +{ + __CPROVER_ASYNC_1: writer(); + __CPROVER_assume(done == 1); + assert(*ptr == 42); +} diff --git a/regression/cbmc-concurrency/may_alias2/test.desc b/regression/cbmc-concurrency/may_alias2/test.desc new file mode 100644 index 00000000000..ce159a72d58 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias2/test.desc @@ -0,0 +1,8 @@ +CORE +main.c + +^EXIT=(0|10)$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring diff --git a/regression/cbmc-concurrency/may_alias3/main.c b/regression/cbmc-concurrency/may_alias3/main.c new file mode 100644 index 00000000000..7e60786c8e0 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias3/main.c @@ -0,0 +1,20 @@ +#include + +int *shared_ptr; +_Bool flag; + +void thread1(void) +{ + int local = 0; + shared_ptr = &local; + flag = 1; +} + +int main(void) +{ + int x = 10; + shared_ptr = &x; + __CPROVER_ASYNC_1: thread1(); + __CPROVER_assume(flag == 1); + assert(*shared_ptr == 10); +} diff --git a/regression/cbmc-concurrency/may_alias3/test.desc b/regression/cbmc-concurrency/may_alias3/test.desc new file mode 100644 index 00000000000..ce159a72d58 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias3/test.desc @@ -0,0 +1,8 @@ +CORE +main.c + +^EXIT=(0|10)$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring From 0f435bc0cc95f10d66657b6b1b07582a0c706ae2 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 27 Mar 2026 23:45:07 +0000 Subject: [PATCH 07/11] Fix clang-format issues in concurrency may-alias code Co-authored-by: Kiro --- src/goto-symex/memory_model_sc.cpp | 188 ++++++++----------- src/goto-symex/partial_order_concurrency.cpp | 118 +++++------- src/goto-symex/symex_dereference.cpp | 95 +++++----- 3 files changed, 179 insertions(+), 222 deletions(-) diff --git a/src/goto-symex/memory_model_sc.cpp b/src/goto-symex/memory_model_sc.cpp index 867d8107b82..d0bcc1ba504 100644 --- a/src/goto-symex/memory_model_sc.cpp +++ b/src/goto-symex/memory_model_sc.cpp @@ -13,8 +13,9 @@ Author: Michael Tautschnig, michael.tautschnig@cs.ox.ac.uk #include -void memory_model_sct:: -operator()(symex_target_equationt &equation, message_handlert &message_handler) +void memory_model_sct::operator()( + symex_target_equationt &equation, + message_handlert &message_handler) { messaget log{message_handler}; log.statistics() << "Adding SC constraints" << messaget::eom; @@ -30,8 +31,7 @@ operator()(symex_target_equationt &equation, message_handlert &message_handler) exprt memory_model_sct::before(event_it e1, event_it e2) { - return partial_order_concurrencyt::before( - e1, e2, AX_PROPAGATION); + return partial_order_concurrencyt::before(e1, e2, AX_PROPAGATION); } bool memory_model_sct::program_order_is_relaxed( @@ -50,16 +50,15 @@ void memory_model_sct::build_per_thread_map( { // this orders the events within a thread - for(eventst::const_iterator - e_it=equation.SSA_steps.begin(); - e_it!=equation.SSA_steps.end(); + for(eventst::const_iterator e_it = equation.SSA_steps.begin(); + e_it != equation.SSA_steps.end(); e_it++) { // concurrency-related? - if(!e_it->is_shared_read() && - !e_it->is_shared_write() && - !e_it->is_spawn() && - !e_it->is_memory_barrier()) continue; + if( + !e_it->is_shared_read() && !e_it->is_shared_write() && + !e_it->is_spawn() && !e_it->is_memory_barrier()) + continue; dest[e_it->source.thread_nr].push_back(e_it); } @@ -72,32 +71,27 @@ void memory_model_sct::thread_spawn( // thread spawn: the spawn precedes the first // instruction of the new thread in program order - unsigned next_thread_id=0; - for(eventst::const_iterator - e_it=equation.SSA_steps.begin(); - e_it!=equation.SSA_steps.end(); + unsigned next_thread_id = 0; + for(eventst::const_iterator e_it = equation.SSA_steps.begin(); + e_it != equation.SSA_steps.end(); e_it++) { if(e_it->is_spawn()) { - per_thread_mapt::const_iterator next_thread= + per_thread_mapt::const_iterator next_thread = per_thread_map.find(++next_thread_id); - if(next_thread==per_thread_map.end()) + if(next_thread == per_thread_map.end()) continue; // add a constraint for all events, // considering regression/cbmc-concurrency/pthread_create_tso1 - for(event_listt::const_iterator - n_it=next_thread->second.begin(); - n_it!=next_thread->second.end(); + for(event_listt::const_iterator n_it = next_thread->second.begin(); + n_it != next_thread->second.end(); n_it++) { if(!(*n_it)->is_memory_barrier()) add_constraint( - equation, - before(e_it, *n_it), - "thread-spawn", - e_it->source); + equation, before(e_it, *n_it), "thread-spawn", e_it->source); } } } @@ -148,8 +142,7 @@ void memory_model_sct::thread_spawn( } #endif -void memory_model_sct::program_order( - symex_target_equationt &equation) +void memory_model_sct::program_order(symex_target_equationt &equation) { per_thread_mapt per_thread_map; build_per_thread_map(equation, per_thread_map); @@ -158,39 +151,32 @@ void memory_model_sct::program_order( // iterate over threads - for(per_thread_mapt::const_iterator - t_it=per_thread_map.begin(); - t_it!=per_thread_map.end(); + for(per_thread_mapt::const_iterator t_it = per_thread_map.begin(); + t_it != per_thread_map.end(); t_it++) { - const event_listt &events=t_it->second; + const event_listt &events = t_it->second; // iterate over relevant events in the thread - event_it previous=equation.SSA_steps.end(); + event_it previous = equation.SSA_steps.end(); - for(event_listt::const_iterator - e_it=events.begin(); - e_it!=events.end(); + for(event_listt::const_iterator e_it = events.begin(); e_it != events.end(); e_it++) { if((*e_it)->is_memory_barrier()) - continue; + continue; - if(previous==equation.SSA_steps.end()) + if(previous == equation.SSA_steps.end()) { // first one? - previous=*e_it; + previous = *e_it; continue; } - add_constraint( - equation, - before(previous, *e_it), - "po", - (*e_it)->source); + add_constraint(equation, before(previous, *e_it), "po", (*e_it)->source); - previous=*e_it; + previous = *e_it; } } } @@ -198,31 +184,27 @@ void memory_model_sct::program_order( void memory_model_sct::write_serialization_external( symex_target_equationt &equation) { - for(address_mapt::const_iterator - a_it=address_map.begin(); - a_it!=address_map.end(); + for(address_mapt::const_iterator a_it = address_map.begin(); + a_it != address_map.end(); a_it++) { - const a_rect &a_rec=a_it->second; + const a_rect &a_rec = a_it->second; // This is quadratic in the number of writes // per address. Perhaps some better encoding // based on 'places'? - for(event_listt::const_iterator - w_it1=a_rec.writes.begin(); - w_it1!=a_rec.writes.end(); + for(event_listt::const_iterator w_it1 = a_rec.writes.begin(); + w_it1 != a_rec.writes.end(); ++w_it1) { - event_listt::const_iterator next=w_it1; + event_listt::const_iterator next = w_it1; ++next; - for(event_listt::const_iterator w_it2=next; - w_it2!=a_rec.writes.end(); + for(event_listt::const_iterator w_it2 = next; w_it2 != a_rec.writes.end(); ++w_it2) { // external? - if((*w_it1)->source.thread_nr== - (*w_it2)->source.thread_nr) + if((*w_it1)->source.thread_nr == (*w_it2)->source.thread_nr) continue; // ws is a total order, no two elements have the same rank @@ -233,7 +215,7 @@ void memory_model_sct::write_serialization_external( exprt alias2 = alias_condition(*w_it2, a_it->first); exprt alias_guard = conjunction({alias1, alias2}); - symbol_exprt s=nondet_bool_symbol("ws-ext"); + symbol_exprt s = nondet_bool_symbol("ws-ext"); // write-to-write edge add_constraint( @@ -257,60 +239,53 @@ void memory_model_sct::from_read(symex_target_equationt &equation) { // from-read: (w', w) in ws and (w', r) in rf -> (r, w) in fr - for(address_mapt::const_iterator - a_it=address_map.begin(); - a_it!=address_map.end(); + for(address_mapt::const_iterator a_it = address_map.begin(); + a_it != address_map.end(); a_it++) { - const a_rect &a_rec=a_it->second; + const a_rect &a_rec = a_it->second; // This is quadratic in the number of writes per address. - for(event_listt::const_iterator - w_prime=a_rec.writes.begin(); - w_prime!=a_rec.writes.end(); + for(event_listt::const_iterator w_prime = a_rec.writes.begin(); + w_prime != a_rec.writes.end(); ++w_prime) { - event_listt::const_iterator next=w_prime; + event_listt::const_iterator next = w_prime; ++next; - for(event_listt::const_iterator w=next; - w!=a_rec.writes.end(); - ++w) + for(event_listt::const_iterator w = next; w != a_rec.writes.end(); ++w) { exprt ws1, ws2; - if(po(*w_prime, *w) && - !program_order_is_relaxed(*w_prime, *w)) + if(po(*w_prime, *w) && !program_order_is_relaxed(*w_prime, *w)) { - ws1=true_exprt(); - ws2=false_exprt(); + ws1 = true_exprt(); + ws2 = false_exprt(); } - else if(po(*w, *w_prime) && - !program_order_is_relaxed(*w, *w_prime)) + else if(po(*w, *w_prime) && !program_order_is_relaxed(*w, *w_prime)) { - ws1=false_exprt(); - ws2=true_exprt(); + ws1 = false_exprt(); + ws2 = true_exprt(); } else { - ws1=before(*w_prime, *w); - ws2=before(*w, *w_prime); + ws1 = before(*w_prime, *w); + ws2 = before(*w, *w_prime); } // smells like cubic - for(choice_symbolst::const_iterator - c_it=choice_symbols.begin(); - c_it!=choice_symbols.end(); + for(choice_symbolst::const_iterator c_it = choice_symbols.begin(); + c_it != choice_symbols.end(); c_it++) { - event_it r=c_it->first.first; - exprt rf=c_it->second; + event_it r = c_it->first.first; + exprt rf = c_it->second; exprt cond; cond.make_nil(); if(c_it->first.second == *w_prime && ws1 != false) { - exprt fr=before(r, *w); + exprt fr = before(r, *w); // Alias conditions for the involved events exprt r_alias = alias_condition(r, a_it->first); @@ -320,21 +295,20 @@ void memory_model_sct::from_read(symex_target_equationt &equation) // the guard of w_prime follows from rf; with rfi // optimisation such as the previous write_symbol_primed // it would even be wrong to add this guard - cond= - implies_exprt( - conjunction({ - r->guard, - (*w)->guard, - ws1, - rf, - r_alias, - w_prime_alias, - w_alias}), - fr); + cond = implies_exprt( + conjunction( + {r->guard, + (*w)->guard, + ws1, + rf, + r_alias, + w_prime_alias, + w_alias}), + fr); } else if(c_it->first.second == *w && ws2 != false) { - exprt fr=before(r, *w_prime); + exprt fr = before(r, *w_prime); // Alias conditions for the involved events exprt r_alias = alias_condition(r, a_it->first); @@ -344,22 +318,20 @@ void memory_model_sct::from_read(symex_target_equationt &equation) // the guard of w follows from rf; with rfi // optimisation such as the previous write_symbol_primed // it would even be wrong to add this guard - cond= - implies_exprt( - conjunction({ - r->guard, - (*w_prime)->guard, - ws2, - rf, - r_alias, - w_alias, - w_prime_alias}), - fr); + cond = implies_exprt( + conjunction( + {r->guard, + (*w_prime)->guard, + ws2, + rf, + r_alias, + w_alias, + w_prime_alias}), + fr); } if(cond.is_not_nil()) - add_constraint(equation, - cond, "fr", r->source); + add_constraint(equation, cond, "fr", r->source); } } } diff --git a/src/goto-symex/partial_order_concurrency.cpp b/src/goto-symex/partial_order_concurrency.cpp index 729283abfb2..b35a883b3cb 100644 --- a/src/goto-symex/partial_order_concurrency.cpp +++ b/src/goto-symex/partial_order_concurrency.cpp @@ -19,8 +19,8 @@ Author: Michael Tautschnig, michael.tautschnig@cs.ox.ac.uk #include #include -partial_order_concurrencyt::partial_order_concurrencyt( - const namespacet &_ns):ns(_ns) +partial_order_concurrencyt::partial_order_concurrencyt(const namespacet &_ns) + : ns(_ns) { } @@ -32,34 +32,31 @@ void partial_order_concurrencyt::add_init_writes( symex_target_equationt &equation) { std::unordered_set init_done; - bool spawn_seen=false; + bool spawn_seen = false; symex_target_equationt::SSA_stepst init_steps; - for(eventst::const_iterator - e_it=equation.SSA_steps.begin(); - e_it!=equation.SSA_steps.end(); + for(eventst::const_iterator e_it = equation.SSA_steps.begin(); + e_it != equation.SSA_steps.end(); e_it++) { if(e_it->is_spawn()) { - spawn_seen=true; + spawn_seen = true; continue; } - else if(!e_it->is_shared_read() && - !e_it->is_shared_write()) + else if(!e_it->is_shared_read() && !e_it->is_shared_write()) continue; - const irep_idt &a=address(e_it); + const irep_idt &a = address(e_it); - if(init_done.find(a)!=init_done.end()) + if(init_done.find(a) != init_done.end()) continue; // Skip may-alias addresses -- their initialization is handled through // the aliasing constraints in the memory model, not through init writes. const irep_idt &obj_name = e_it->ssa_lhs.get_object_name(); - if( - id2string(obj_name).find("concurrency::may_alias") != std::string::npos) + if(id2string(obj_name).find("concurrency::may_alias") != std::string::npos) { init_done.insert(a); continue; @@ -71,10 +68,10 @@ void partial_order_concurrencyt::add_init_writes( e_it->source, goto_trace_stept::typet::SHARED_WRITE); SSA_stept &SSA_step = init_steps.back(); - SSA_step.guard=true_exprt(); + SSA_step.guard = true_exprt(); // no SSA L2 index, thus nondet value SSA_step.ssa_lhs = remove_level_2(e_it->ssa_lhs); - SSA_step.atomic_section_id=0; + SSA_step.atomic_section_id = 0; } init_done.insert(a); @@ -92,21 +89,18 @@ void partial_order_concurrencyt::build_event_lists( // a per-thread counter std::map counter; - for(eventst::const_iterator - e_it=equation.SSA_steps.begin(); - e_it!=equation.SSA_steps.end(); + for(eventst::const_iterator e_it = equation.SSA_steps.begin(); + e_it != equation.SSA_steps.end(); e_it++) { - if(e_it->is_shared_read() || - e_it->is_shared_write() || - e_it->is_spawn()) + if(e_it->is_shared_read() || e_it->is_shared_write() || e_it->is_spawn()) { - unsigned thread_nr=e_it->source.thread_nr; + unsigned thread_nr = e_it->source.thread_nr; if(!e_it->is_spawn()) { const irep_idt &addr = address(e_it); - a_rect &a_rec=address_map[addr]; + a_rect &a_rec = address_map[addr]; if(e_it->is_shared_read()) a_rec.reads.push_back(e_it); @@ -125,25 +119,23 @@ void partial_order_concurrencyt::build_event_lists( } // maps an event id to a per-thread counter - unsigned cnt=counter[thread_nr]++; - numbering[e_it]=cnt; + unsigned cnt = counter[thread_nr]++; + numbering[e_it] = cnt; } } // Second pass: for each may-alias event, add it to all non-may-alias // addresses' read/write lists so it participates in their constraints. // Only add to addresses where the base type is compatible. - for(eventst::const_iterator - e_it=equation.SSA_steps.begin(); - e_it!=equation.SSA_steps.end(); + for(eventst::const_iterator e_it = equation.SSA_steps.begin(); + e_it != equation.SSA_steps.end(); e_it++) { if(!e_it->is_shared_read() && !e_it->is_shared_write()) continue; const irep_idt &obj_name = e_it->ssa_lhs.get_object_name(); - if( - id2string(obj_name).find("concurrency::may_alias") == std::string::npos) + if(id2string(obj_name).find("concurrency::may_alias") == std::string::npos) continue; const typet &may_alias_type = e_it->ssa_lhs.type(); @@ -177,12 +169,11 @@ void partial_order_concurrencyt::build_event_lists( } messaget log{message_handler}; - for(address_mapt::const_iterator - a_it=address_map.begin(); - a_it!=address_map.end(); + for(address_mapt::const_iterator a_it = address_map.begin(); + a_it != address_map.end(); a_it++) { - const a_rect &a_rec=a_it->second; + const a_rect &a_rec = a_it->second; if(a_rec.reads.empty()) continue; @@ -191,34 +182,30 @@ void partial_order_concurrencyt::build_event_lists( } } -irep_idt partial_order_concurrencyt::rw_clock_id( - event_it event, - axiomt axiom) +irep_idt partial_order_concurrencyt::rw_clock_id(event_it event, axiomt axiom) { if(event->is_shared_write()) - return id2string(id(event))+"$wclk$"+std::to_string(axiom); + return id2string(id(event)) + "$wclk$" + std::to_string(axiom); else if(event->is_shared_read()) - return id2string(id(event))+"$rclk$"+std::to_string(axiom); + return id2string(id(event)) + "$rclk$" + std::to_string(axiom); else UNREACHABLE; } -symbol_exprt partial_order_concurrencyt::clock( - event_it event, - axiomt axiom) +symbol_exprt partial_order_concurrencyt::clock(event_it event, axiomt axiom) { PRECONDITION(!numbering.empty()); irep_idt identifier; if(event->is_shared_write()) - identifier=rw_clock_id(event, axiom); + identifier = rw_clock_id(event, axiom); else if(event->is_shared_read()) - identifier=rw_clock_id(event, axiom); + identifier = rw_clock_id(event, axiom); else if(event->is_spawn()) { - identifier= - "t"+std::to_string(event->source.thread_nr+1)+"$"+ - std::to_string(numbering[event])+"$spwnclk$"+std::to_string(axiom); + identifier = "t" + std::to_string(event->source.thread_nr + 1) + "$" + + std::to_string(numbering[event]) + "$spwnclk$" + + std::to_string(axiom); } else UNREACHABLE; @@ -235,32 +222,29 @@ void partial_order_concurrencyt::build_clock_type() } exprt partial_order_concurrencyt::before( - event_it e1, event_it e2, unsigned axioms) + event_it e1, + event_it e2, + unsigned axioms) { - const axiomt axiom_bits[]= - { - AX_SC_PER_LOCATION, - AX_NO_THINAIR, - AX_OBSERVATION, - AX_PROPAGATION - }; + const axiomt axiom_bits[] = { + AX_SC_PER_LOCATION, AX_NO_THINAIR, AX_OBSERVATION, AX_PROPAGATION}; exprt::operandst ops; - ops.reserve(sizeof(axiom_bits)/sizeof(axiomt)); + ops.reserve(sizeof(axiom_bits) / sizeof(axiomt)); - for(int i=0; iatomic_section_id!=0 && - e1->atomic_section_id==e2->atomic_section_id) + if( + e1->atomic_section_id != 0 && + e1->atomic_section_id == e2->atomic_section_id) ops.push_back(equal_exprt(clock(e1, ax), clock(e2, ax))); else - ops.push_back( - binary_relation_exprt(clock(e1, ax), ID_lt, clock(e2, ax))); + ops.push_back(binary_relation_exprt(clock(e1, ax), ID_lt, clock(e2, ax))); } POSTCONDITION(!ops.empty()); @@ -274,7 +258,7 @@ void partial_order_concurrencyt::add_constraint( const std::string &msg, const symex_targett::sourcet &source) const { - exprt tmp=cond; + exprt tmp = cond; simplify(tmp, ns); equation.constraint(tmp, msg, source); @@ -285,8 +269,7 @@ exprt partial_order_concurrencyt::alias_condition( const irep_idt &target_address) const { const irep_idt &obj_name = event->ssa_lhs.get_object_name(); - if( - id2string(obj_name).find("concurrency::may_alias") == std::string::npos) + if(id2string(obj_name).find("concurrency::may_alias") == std::string::npos) return true_exprt{}; // Look up the source pointer from the symbol table via the object name @@ -305,8 +288,7 @@ exprt partial_order_concurrencyt::alias_condition( const ssa_exprt &target_l1_sym = rep_it->second; // Build: pointer_object(source_pointer) == pointer_object(&target) - const typet po_type = - unsignedbv_typet{config.bv_encoding.object_bits}; + const typet po_type = unsignedbv_typet{config.bv_encoding.object_bits}; address_of_exprt target_addr(target_l1_sym); diff --git a/src/goto-symex/symex_dereference.cpp b/src/goto-symex/symex_dereference.cpp index e54536fadf0..d622a7cab4c 100644 --- a/src/goto-symex/symex_dereference.cpp +++ b/src/goto-symex/symex_dereference.cpp @@ -19,8 +19,6 @@ Author: Daniel Kroening, kroening@kroening.com #include #include -#include - #include #include "expr_skeleton.h" @@ -29,6 +27,8 @@ Author: Daniel Kroening, kroening@kroening.com #include "symex_assign.h" #include "symex_dereference_state.h" +#include + /// Transforms an lvalue expression by replacing any dereference operations it /// contains with explicit references to the objects they may point to (using /// \ref goto_symext::dereference_rec), and translates `byte_extract,` `member` @@ -49,20 +49,21 @@ exprt goto_symext::address_arithmetic( { exprt result; - if(expr.id()==ID_byte_extract_little_endian || - expr.id()==ID_byte_extract_big_endian) + if( + expr.id() == ID_byte_extract_little_endian || + expr.id() == ID_byte_extract_big_endian) { // address_of(byte_extract(op, offset, t)) is // address_of(op) + offset with adjustments for arrays - const byte_extract_exprt &be=to_byte_extract_expr(expr); + const byte_extract_exprt &be = to_byte_extract_expr(expr); // recursive call result = address_arithmetic(be.op(), state, keep_array); if(be.op().type().id() == ID_array && result.id() == ID_address_of) { - address_of_exprt &a=to_address_of_expr(result); + address_of_exprt &a = to_address_of_expr(result); // turn &a of type T[i][j] into &(a[0][0]) for(const typet *t = &(to_type_with_subtype(a.type()).subtype()); @@ -72,27 +73,26 @@ exprt goto_symext::address_arithmetic( } // do (expr.type() *)(((char *)op)+offset) - result=typecast_exprt(result, pointer_type(char_type())); + result = typecast_exprt(result, pointer_type(char_type())); // there could be further dereferencing in the offset - exprt offset=be.offset(); + exprt offset = be.offset(); dereference_rec(offset, state, false, false); - result=plus_exprt(result, offset); + result = plus_exprt(result, offset); // treat &array as &array[0] const typet &expr_type = expr.type(); typet dest_type_subtype; - if(expr_type.id()==ID_array && !keep_array) + if(expr_type.id() == ID_array && !keep_array) dest_type_subtype = to_array_type(expr_type).element_type(); else - dest_type_subtype=expr_type; + dest_type_subtype = expr_type; - result=typecast_exprt(result, pointer_type(dest_type_subtype)); + result = typecast_exprt(result, pointer_type(dest_type_subtype)); } - else if(expr.id()==ID_index || - expr.id()==ID_member) + else if(expr.id() == ID_index || expr.id() == ID_member) { object_descriptor_exprt ode; ode.build(expr, ns); @@ -105,18 +105,18 @@ exprt goto_symext::address_arithmetic( do_simplify(result, state); } - else if(expr.id()==ID_dereference) + else if(expr.id() == ID_dereference) { // ANSI-C guarantees &*p == p no matter what p is, // even if it's complete garbage // just grab the pointer, but be wary of further dereferencing // in the pointer itself - result=to_dereference_expr(expr).pointer(); + result = to_dereference_expr(expr).pointer(); dereference_rec(result, state, false, false); } - else if(expr.id()==ID_if) + else if(expr.id() == ID_if) { - if_exprt if_expr=to_if_expr(expr); + if_exprt if_expr = to_if_expr(expr); // the condition is not an address dereference_rec(if_expr.cond(), state, false, false); @@ -127,15 +127,14 @@ exprt goto_symext::address_arithmetic( if_expr.false_case() = address_arithmetic(if_expr.false_case(), state, keep_array); - result=if_expr; + result = if_expr; } - else if(expr.id()==ID_symbol || - expr.id()==ID_string_constant || - expr.id()==ID_label || - expr.id()==ID_array) + else if( + expr.id() == ID_symbol || expr.id() == ID_string_constant || + expr.id() == ID_label || expr.id() == ID_array) { // give up, just dereference - result=expr; + result = expr; dereference_rec(result, state, false, false); // turn &array into &array[0] @@ -143,7 +142,7 @@ exprt goto_symext::address_arithmetic( result = index_exprt(result, from_integer(0, c_index_type())); // handle field-sensitive SSA symbol - mp_integer offset=0; + mp_integer offset = 0; if(is_ssa_expr(expr)) { auto offset_opt = compute_pointer_offset(expr, ns); @@ -151,7 +150,7 @@ exprt goto_symext::address_arithmetic( offset = *offset_opt; } - if(offset>0) + if(offset > 0) { const byte_extract_exprt be = make_byte_extract( to_ssa_expr(expr).get_l1_object(), @@ -163,7 +162,7 @@ exprt goto_symext::address_arithmetic( do_simplify(result, state); } else - result=address_of_exprt(result); + result = address_of_exprt(result); } else if(expr.id() == ID_typecast) { @@ -198,7 +197,8 @@ exprt goto_symext::address_arithmetic( symbol_exprt goto_symext::cache_dereference(exprt &dereference_result, statet &state) { - auto const cache_key = [&] { + auto const cache_key = [&] + { auto cache_key = state.field_sensitivity.apply(ns, state, dereference_result, false); if(auto let_expr = expr_try_dynamic_cast(dereference_result)) @@ -302,7 +302,7 @@ void goto_symext::dereference_rec( bool write, bool is_in_binding_expression) { - if(expr.id()==ID_dereference) + if(expr.id() == ID_dereference) { bool expr_is_not_null = false; @@ -361,8 +361,8 @@ void goto_symext::dereference_rec( // bypass value-set dereference and create a fresh may-alias object instead. if(state.threads.size() > 1 && !symex_config.allow_pointer_unsoundness) { - auto shared_sym = find_shared_pointer_in_dereference( - tmp1, path_storage.dirty, ns); + auto shared_sym = + find_shared_pointer_in_dereference(tmp1, path_storage.dirty, ns); if(shared_sym.has_value()) { // Create a fresh symbol to represent what the shared pointer may @@ -403,7 +403,6 @@ void goto_symext::dereference_rec( dereference.dereference(tmp1, symex_config.show_points_to_sets); // std::cout << "**** " << format(tmp2) << '\n'; - // this may yield a new auto-object trigger_auto_object(tmp2, state); @@ -435,37 +434,38 @@ void goto_symext::dereference_rec( // where a is a zero-sized array. This gets // re-written into *(&x.a+i) - index_exprt index_expr=to_index_expr(expr); + index_exprt index_expr = to_index_expr(expr); address_of_exprt address_of_expr(index_expr.array()); - address_of_expr.type()=pointer_type(expr.type()); + address_of_expr.type() = pointer_type(expr.type()); dereference_exprt tmp{plus_exprt{address_of_expr, index_expr.index()}}; - tmp.add_source_location()=expr.source_location(); + tmp.add_source_location() = expr.source_location(); // recursive call dereference_rec(tmp, state, write, is_in_binding_expression); expr.swap(tmp); } - else if(expr.id()==ID_index && - to_index_expr(expr).array().type().id()==ID_pointer) + else if( + expr.id() == ID_index && + to_index_expr(expr).array().type().id() == ID_pointer) { // old stuff, will go away UNREACHABLE; } - else if(expr.id()==ID_address_of) + else if(expr.id() == ID_address_of) { - address_of_exprt &address_of_expr=to_address_of_expr(expr); + address_of_exprt &address_of_expr = to_address_of_expr(expr); - exprt &object=address_of_expr.object(); + exprt &object = address_of_expr.object(); expr = address_arithmetic( object, state, to_pointer_type(expr.type()).base_type().id() == ID_array); } - else if(expr.id()==ID_typecast) + else if(expr.id() == ID_typecast) { - exprt &tc_op=to_typecast_expr(expr).op(); + exprt &tc_op = to_typecast_expr(expr).op(); // turn &array into &array[0] when casting to pointer-to-element-type if( @@ -555,10 +555,13 @@ void goto_symext::dereference(exprt &expr, statet &state, bool write) // Symbols whose address is taken need to be renamed to level 1 // in order to distinguish addresses of local variables // from different frames. - expr = apply_to_objects_in_dereference(std::move(expr), [&](exprt e) { - return state.field_sensitivity.apply( - ns, state, state.rename(std::move(e), ns).get(), false); - }); + expr = apply_to_objects_in_dereference( + std::move(expr), + [&](exprt e) + { + return state.field_sensitivity.apply( + ns, state, state.rename(std::move(e), ns).get(), false); + }); // start the recursion! dereference_rec(expr, state, write, false); From 289f0e58a4734314eca94e3370049ea65801bcb6 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Sat, 28 Mar 2026 00:10:58 +0000 Subject: [PATCH 08/11] Fix soundness of may-alias read-from constraints The rf-some constraint (which says 'a read must read from at least one write') was generated per-address without alias guards. When a may-alias read was added to multiple addresses (e.g., val1 and val2), it got separate rf-some constraints for each, forcing it to read from ALL addresses simultaneously. Since a read can only read from one write, this made the constraints unsatisfiable, causing the solver to make the guard false and assertions vacuously true. Fix by guarding the rf-some constraint with the alias condition: the may-alias read only needs to read from writes at address A if the source pointer actually points to A. Also fix the source pointer stored for alias conditions to use the L2-renamed version, which is properly constrained by the memory model's read-from relation for the pointer variable itself. Background: the partial-order encoding follows Alglave/Kroening/ Tautschnig CAV 2013 'Partial Orders for Efficient Bounded Model Checking of Concurrent Software'. The rf-some constraint corresponds to Section 4.2's requirement that each read maps to at least one write via the read-from relation. See may_alias_soundness.md for a formal soundness argument. Additional cleanup: - Extract is_may_alias_step() and is_may_alias_address() helpers - Remove unused may_alias_pointer field from SSA_stept - Add detailed comments referencing the CAV 2013 paper to all constraint generation functions (read_from, write_serialization, from_read) - Add soundness regression test that verifies a real concurrent bug IS detected (assertion correctly fails when pointer aliasing makes the property false) Co-authored-by: Kiro --- .../may_alias_soundness/main.c | 23 +++ .../may_alias_soundness/test.desc | 13 ++ src/goto-symex/may_alias_soundness.md | 135 ++++++++++++++++++ src/goto-symex/memory_model.cpp | 33 ++++- src/goto-symex/memory_model_sc.cpp | 21 +++ src/goto-symex/partial_order_concurrency.cpp | 36 +++-- src/goto-symex/ssa_step.h | 11 -- src/goto-symex/symex_dereference.cpp | 10 +- 8 files changed, 252 insertions(+), 30 deletions(-) create mode 100644 regression/cbmc-concurrency/may_alias_soundness/main.c create mode 100644 regression/cbmc-concurrency/may_alias_soundness/test.desc create mode 100644 src/goto-symex/may_alias_soundness.md diff --git a/regression/cbmc-concurrency/may_alias_soundness/main.c b/regression/cbmc-concurrency/may_alias_soundness/main.c new file mode 100644 index 00000000000..33c98ee5a2e --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_soundness/main.c @@ -0,0 +1,23 @@ +// Soundness test: the assertion MUST fail. +// writer() sets ptr to &val2 (which is 99), so *ptr != 42 is possible. +#include + +int *ptr; +int val1, val2; +_Bool done; + +void writer(void) +{ + val1 = 42; + val2 = 99; + ptr = &val2; + done = 1; +} + +int main(void) +{ + ptr = &val1; + __CPROVER_ASYNC_1: writer(); + __CPROVER_assume(done == 1); + assert(*ptr == 42); +} diff --git a/regression/cbmc-concurrency/may_alias_soundness/test.desc b/regression/cbmc-concurrency/may_alias_soundness/test.desc new file mode 100644 index 00000000000..e74f2dff9d0 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_soundness/test.desc @@ -0,0 +1,13 @@ +CORE +main.c + +^VERIFICATION FAILED$ +^EXIT=10$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring +-- +Soundness test: writer() changes ptr to point to val2 (=99), so +*ptr == 42 must fail. This verifies that may-alias constraints +correctly propagate pointer aliasing through the memory model. diff --git a/src/goto-symex/may_alias_soundness.md b/src/goto-symex/may_alias_soundness.md new file mode 100644 index 00000000000..de6a85c1d55 --- /dev/null +++ b/src/goto-symex/may_alias_soundness.md @@ -0,0 +1,135 @@ +/// \file +/// Soundness argument for may-alias concurrent pointer dereferences +/// +/// Background: Alglave/Kroening/Tautschnig, "Partial Orders for Efficient +/// Bounded Model Checking of Concurrent Software", CAV 2013. +/// +/// == Problem == +/// +/// When a shared pointer `ptr` is dereferenced in a concurrent program, +/// the value set may not accurately reflect all possible targets because +/// other threads may have modified `ptr`. The standard approach of +/// consulting the value set and creating a conditional expression +/// (ptr == &o1 ? o1 : ptr == &o2 ? o2 : ...) is unsound because the +/// value set is computed per-thread and doesn't account for inter-thread +/// writes to `ptr`. +/// +/// == Solution: May-Alias Objects == +/// +/// Instead of consulting the value set, we create a fresh symbol +/// `concurrency::may_alias$N` of the pointed-to type. This symbol +/// represents "whatever ptr points to" and participates in the +/// partial-order constraints as follows. +/// +/// == Formal Argument == +/// +/// Let `m` be the may-alias read event for `*ptr`, and let `ptr_read` +/// be the L2-renamed SSA symbol for the read of `ptr` at the dereference +/// point. The value of `ptr_read` is determined by the read-from relation +/// for `ptr` (i.e., which write to `ptr` this read sees). +/// +/// For each concrete address `a` with representative object `obj_a`: +/// +/// 1. ALIAS CONDITION: alias(m, a) ≡ pointer_object(ptr_read) = pointer_object(&obj_a) +/// This is true iff `ptr` points to `obj_a` in the current execution. +/// +/// 2. READ-FROM (rf-val, rf-some): +/// For each write `w` to address `a`: +/// s_{w,m} ⇒ alias(m, a) ∧ val(w) = val(m) +/// The rf-some constraint is: +/// alias(m, a) ⇒ ∨_w s_{w,m} +/// This says: IF ptr points to obj_a, THEN m must read from some write +/// to obj_a. If ptr does NOT point to obj_a, the constraint is vacuous. +/// +/// CORRECTNESS: In any valid execution where ptr points to obj_a, +/// the may-alias read sees the value of obj_a as determined by the +/// write serialisation. If ptr doesn't point to obj_a, the may-alias +/// read is unconstrained w.r.t. obj_a (correct, since it reads from +/// a different address). +/// +/// 3. WRITE SERIALISATION (ws-ext): +/// For may-alias writes w_m to address a: +/// alias(w_m, a) ∧ alias(w', a) ∧ s ⇒ before(w_m, w') +/// alias(w_m, a) ∧ alias(w', a) ∧ ¬s ⇒ before(w', w_m) +/// The alias conditions ensure that write serialisation only applies +/// when the may-alias write actually targets address a. +/// +/// 4. FROM-READ (fr): +/// For may-alias read m at address a: +/// alias(m, a) ∧ s_{w',m} ∧ before(w', w) ⇒ before(m, w) +/// The alias condition ensures from-read only applies when the +/// may-alias read actually targets address a. +/// +/// 5. INIT WRITES: +/// May-alias addresses do NOT get init writes. Their initial value +/// is determined by the aliasing: if ptr points to obj_a, the +/// may-alias read sees obj_a's value (including its init write). +/// +/// == Soundness Theorem (sketch) == +/// +/// Claim: For any satisfying assignment V of (ssa ∧ pord), there exists +/// a valid execution of the original program (without may-alias objects) +/// that produces the same observable behaviour. +/// +/// Proof sketch: +/// - V determines a value for ptr_read (via rf for ptr). +/// - This value equals &obj_a for some concrete object obj_a. +/// - The alias condition alias(m, a) is true, and alias(m, b) is false +/// for all b ≠ a. +/// - The rf-some constraint forces m to read from some write to obj_a. +/// - The rf-val constraint forces val(m) = val(w) for the selected write. +/// - Therefore val(m) equals the value of obj_a as seen through the +/// memory model — exactly what *ptr would read in the original program. +/// - The ws and fr constraints for m at address a are equivalent to the +/// constraints that would exist for a direct read of obj_a. +/// - The ws and fr constraints for m at other addresses b are vacuous +/// (guarded by false alias conditions). +/// - Therefore the partial order constraints for m are equivalent to +/// those for a direct read of obj_a, and the execution is valid. +/// +/// Claim: For any valid execution of the original program, there exists +/// a satisfying assignment of (ssa ∧ pord). +/// +/// Proof sketch: +/// - In the execution, *ptr reads from some concrete object obj_a. +/// - Set ptr_read = &obj_a (via the rf for ptr). +/// - Set val(m) = val(obj_a) as determined by the execution's rf. +/// - The alias condition alias(m, a) is true. +/// - The rf-some, rf-val, ws, and fr constraints for m at address a +/// are satisfied by the same clock assignment as for a direct read +/// of obj_a in the original execution. +/// - The constraints for m at other addresses are vacuously satisfied. +/// - Therefore (ssa ∧ pord) is satisfiable. +/// +/// == Limitations == +/// +/// 1. SHARED POINTER ONLY: The may-alias mechanism only triggers when +/// the pointer expression directly contains a shared (global or dirty) +/// symbol. A local pointer assigned from a shared source uses the +/// standard value-set dereference, which may be unsound. +/// Example: `int *local = shared_ptr; *local` uses value-set. +/// Fix: Track "tainted" pointers — any local assigned from a shared +/// expression inherits the shared property. Alternatively, treat all +/// pointer dereferences as potentially shared in multi-threaded mode +/// (conservative but simple; increases formula size). +/// +/// 2. POINTER-OBJECT GRANULARITY: The alias condition uses +/// pointer_object equality, which checks object identity but not +/// offset within the object. This is sound (over-approximates +/// aliasing) but imprecise for byte-level pointer arithmetic. +/// In practice, field sensitivity means struct members and array +/// elements are separate addresses, so this rarely matters. +/// Fix: Use full pointer equality (including offset) instead of +/// pointer_object equality. Requires address_representatives to +/// store full pointer expressions. +/// +/// 3. TYPE COMPATIBILITY: May-alias events are only distributed to +/// addresses with matching types. This prevents type-mismatch +/// errors in value equality constraints but means aliasing through +/// genuinely different types (e.g., int/float union punning) is +/// not modelled. In practice, most concurrent pointer accesses +/// use consistent types, so this rarely matters. +/// Fix: Remove the type check and use byte_extract/byte_update +/// for type mismatches (as the non-concurrent dereference does). +/// This increases formula size quadratically in the number of +/// addresses. diff --git a/src/goto-symex/memory_model.cpp b/src/goto-symex/memory_model.cpp index 3e906f2f1df..7ec9551d2af 100644 --- a/src/goto-symex/memory_model.cpp +++ b/src/goto-symex/memory_model.cpp @@ -42,9 +42,24 @@ bool memory_model_baset::po(event_it e1, event_it e2) void memory_model_baset::read_from(symex_target_equationt &equation) { - // We iterate over all the reads, and - // make them match at least one - // (internal or external) write. + // Encode the read-from relation (rf) as described in + // Alglave/Kroening/Tautschnig CAV 2013, Section 4.2. + // + // For each read r at address a, we introduce Boolean choice variables + // s_{w,r} for each candidate write w to address a. The constraints are: + // + // rf-val: s_{w,r} => alias(r,a) ∧ g(w) ∧ val(w) = val(r) + // rf-some: alias(r,a) ∧ g(r) => ∨_w s_{w,r} + // rf-order: s_{w,r} => before(w, r) [for external rf] + // + // For may-alias reads (created for shared pointer dereferences in + // concurrent context), the alias condition alias(r,a) guards both + // rf-val and rf-some. This ensures that a may-alias read only needs + // to read from writes at address a when the source pointer actually + // points to a. Without this guard, a may-alias read distributed to + // multiple addresses would be forced to read from ALL of them + // simultaneously, making the constraints unsatisfiable. + // See may_alias_soundness.md for the formal soundness argument. for(const auto &address : address_map) { @@ -74,10 +89,18 @@ void memory_model_baset::read_from(symex_target_equationt &equation) if(!rf_choice_symbols.empty()) { // Add the read's guard, each of the writes' guards is implied - // by each entry in rf_some + // by each entry in rf_some. + // For may-alias reads, the rf-some constraint is conditional on + // the pointer actually aliasing with this address. Without this + // guard, a may-alias read added to multiple addresses would be + // forced to read from ALL addresses simultaneously, which is + // unsatisfiable and makes assertions vacuously true. + // See Alglave/Kroening/Tautschnig CAV 2013 (Sec. 4.2, rf-some) + // for the standard rf-some encoding. + exprt guard = and_exprt{read_event->guard, read_alias}; add_constraint( equation, - implies_exprt{read_event->guard, disjunction(rf_choice_symbols)}, + implies_exprt{guard, disjunction(rf_choice_symbols)}, "rf-some", read_event->source); } diff --git a/src/goto-symex/memory_model_sc.cpp b/src/goto-symex/memory_model_sc.cpp index d0bcc1ba504..060261ad062 100644 --- a/src/goto-symex/memory_model_sc.cpp +++ b/src/goto-symex/memory_model_sc.cpp @@ -184,6 +184,17 @@ void memory_model_sct::program_order(symex_target_equationt &equation) void memory_model_sct::write_serialization_external( symex_target_equationt &equation) { + // Encode write serialisation (ws) as described in + // Alglave/Kroening/Tautschnig CAV 2013, Section 4.2. + // + // ws is a per-address total order on writes. For each pair of writes + // (w1, w2) to the same address, we introduce a Boolean s and add: + // alias_guard ∧ s => before(w1, w2) + // alias_guard ∧ ¬s => before(w2, w1) + // + // For may-alias writes, alias_guard is the conjunction of alias + // conditions for both writes. This ensures write serialisation only + // applies when both writes actually target this address. for(address_mapt::const_iterator a_it = address_map.begin(); a_it != address_map.end(); a_it++) @@ -237,6 +248,16 @@ void memory_model_sct::write_serialization_external( void memory_model_sct::from_read(symex_target_equationt &equation) { + // Encode from-read (fr) as described in + // Alglave/Kroening/Tautschnig CAV 2013, Section 4.2. + // + // (r, w) ∈ fr iff ∃w'. (w', r) ∈ rf ∧ (w', w) ∈ ws + // Encoded as: s_{w',r} ∧ before(w', w) => before(r, w) + // + // For may-alias events, all three participants (r, w', w) are guarded + // by alias conditions. This ensures fr only applies when all events + // actually target this address. + // from-read: (w', w) in ws and (w', r) in rf -> (r, w) in fr for(address_mapt::const_iterator a_it = address_map.begin(); diff --git a/src/goto-symex/partial_order_concurrency.cpp b/src/goto-symex/partial_order_concurrency.cpp index b35a883b3cb..b4dcadf4d90 100644 --- a/src/goto-symex/partial_order_concurrency.cpp +++ b/src/goto-symex/partial_order_concurrency.cpp @@ -19,6 +19,26 @@ Author: Michael Tautschnig, michael.tautschnig@cs.ox.ac.uk #include #include +/// Check whether an SSA step refers to a may-alias object created for +/// concurrent shared pointer dereferences. May-alias symbols are created +/// in symex_dereference.cpp and have their source pointer stored in +/// symbolt::value. We detect them by checking for the "concurrency::may_alias" +/// prefix in the object name. +/// See issue #790 and Alglave/Kroening/Tautschnig CAV 2013 for background +/// on the partial-order encoding that these objects participate in. +static bool is_may_alias_step(const SSA_stept &step) +{ + return id2string(step.ssa_lhs.get_object_name()) + .find("concurrency::may_alias") != std::string::npos; +} + +/// Check whether an address in the address_map corresponds to a may-alias +/// object. +static bool is_may_alias_address(const irep_idt &address) +{ + return id2string(address).find("concurrency::may_alias") != std::string::npos; +} + partial_order_concurrencyt::partial_order_concurrencyt(const namespacet &_ns) : ns(_ns) { @@ -55,8 +75,7 @@ void partial_order_concurrencyt::add_init_writes( // Skip may-alias addresses -- their initialization is handled through // the aliasing constraints in the memory model, not through init writes. - const irep_idt &obj_name = e_it->ssa_lhs.get_object_name(); - if(id2string(obj_name).find("concurrency::may_alias") != std::string::npos) + if(is_may_alias_step(*e_it)) { init_done.insert(a); continue; @@ -108,10 +127,8 @@ void partial_order_concurrencyt::build_event_lists( a_rec.writes.push_back(e_it); // Record a representative L1 symbol for non-may-alias addresses - const irep_idt &obj_name = e_it->ssa_lhs.get_object_name(); if( - id2string(obj_name).find("concurrency::may_alias") == - std::string::npos && + !is_may_alias_step(*e_it) && address_representatives.find(addr) == address_representatives.end()) { address_representatives.emplace(addr, remove_level_2(e_it->ssa_lhs)); @@ -134,8 +151,7 @@ void partial_order_concurrencyt::build_event_lists( if(!e_it->is_shared_read() && !e_it->is_shared_write()) continue; - const irep_idt &obj_name = e_it->ssa_lhs.get_object_name(); - if(id2string(obj_name).find("concurrency::may_alias") == std::string::npos) + if(!is_may_alias_step(*e_it)) continue; const typet &may_alias_type = e_it->ssa_lhs.type(); @@ -148,9 +164,7 @@ void partial_order_concurrencyt::build_event_lists( continue; // Skip other may-alias addresses - if( - id2string(addr_entry.first).find("concurrency::may_alias") != - std::string::npos) + if(is_may_alias_address(addr_entry.first)) continue; // Only add to addresses with matching type to avoid type mismatches @@ -269,7 +283,7 @@ exprt partial_order_concurrencyt::alias_condition( const irep_idt &target_address) const { const irep_idt &obj_name = event->ssa_lhs.get_object_name(); - if(id2string(obj_name).find("concurrency::may_alias") == std::string::npos) + if(!is_may_alias_step(*event)) return true_exprt{}; // Look up the source pointer from the symbol table via the object name diff --git a/src/goto-symex/ssa_step.h b/src/goto-symex/ssa_step.h index 1be1d124643..bdb0f794aa3 100644 --- a/src/goto-symex/ssa_step.h +++ b/src/goto-symex/ssa_step.h @@ -165,16 +165,6 @@ class SSA_stept // for function calls std::vector ssa_function_arguments, converted_function_arguments; - // For may-alias objects created during concurrent pointer dereferencing: - // records the pointer expression that this may-alias object was created for. - // Empty (nil) for regular events. - exprt may_alias_pointer; - - bool is_may_alias() const - { - return may_alias_pointer.is_not_nil(); - } - // for SHARED_READ/SHARED_WRITE and ATOMIC_BEGIN/ATOMIC_END unsigned atomic_section_id = 0; @@ -200,7 +190,6 @@ class SSA_stept cond_expr(static_cast(get_nil_irep())), cond_handle(false_exprt()), formatted(false), - may_alias_pointer(static_cast(get_nil_irep())), atomic_section_id(0), ignore(false) { diff --git a/src/goto-symex/symex_dereference.cpp b/src/goto-symex/symex_dereference.cpp index d622a7cab4c..fe2c21fed63 100644 --- a/src/goto-symex/symex_dereference.cpp +++ b/src/goto-symex/symex_dereference.cpp @@ -378,9 +378,13 @@ void goto_symext::dereference_rec( may_alias_symbol.is_thread_local = false; may_alias_symbol.is_file_local = false; - // Store the source pointer on the symbol's value field so the memory - // model can later look it up to create conditional aliasing constraints. - may_alias_symbol.value = tmp1; + // Store the L2-renamed source pointer so the memory model can + // build alias conditions using the correct SSA version. The L2 + // version reflects the value of the pointer at this program point. + ssa_exprt l2_ptr = to_ssa_expr( + state.rename(shared_sym.value(), ns) + .get()); + may_alias_symbol.value = state.rename(l2_ptr, ns).get(); expr = may_alias_symbol.symbol_expr(); return; From 1a51ee700bfe60b497ca2ca252a99b60551b12f0 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Sat, 28 Mar 2026 09:47:17 +0000 Subject: [PATCH 09/11] Detect shared pointer sources through value-set analysis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Local pointers assigned from shared sources (e.g., int *local = shared_ptr) were not detected as needing may-alias treatment, causing missed bugs. Fix by querying the value set when dereferencing a local pointer symbol: if any of the pointer's possible targets is a shared global variable, treat the dereference as shared and create a may-alias object. The check excludes: - Struct member accesses (to avoid false positives from thread arguments) - Failed symbols (internal CBMC objects) - Dynamic objects (malloc'd memory is shared by design but doesn't need may-alias treatment — the value-set dereference handles it correctly) - __spawned_thread parameters (thread-local copies of pthread_create args) Root cause of thread_chain_posix2 regression: __spawned_thread parameters are not marked thread_local, and constant propagation substitutes them into pointer expressions. Dynamic objects from malloc are also not thread_local. Both caused false may-alias triggers. Fixed by excluding __spawned_thread symbols from the direct check and dynamic objects from the indirect (value-set) check. Co-authored-by: Kiro --- .../may_alias_local_ptr/main.c | 29 +++++++++ .../may_alias_local_ptr/test.desc | 13 ++++ src/goto-symex/may_alias_soundness.md | 32 +++++----- src/goto-symex/partial_order_concurrency.cpp | 1 + src/goto-symex/symex_dereference.cpp | 59 +++++++++++++++++-- 5 files changed, 114 insertions(+), 20 deletions(-) create mode 100644 regression/cbmc-concurrency/may_alias_local_ptr/main.c create mode 100644 regression/cbmc-concurrency/may_alias_local_ptr/test.desc diff --git a/regression/cbmc-concurrency/may_alias_local_ptr/main.c b/regression/cbmc-concurrency/may_alias_local_ptr/main.c new file mode 100644 index 00000000000..b1f7ca5727e --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_local_ptr/main.c @@ -0,0 +1,29 @@ +// Test that local pointers derived from shared sources are handled +// correctly by the may-alias mechanism. +#include + +int *shared_ptr; +int val1, val2; +_Bool done; + +void writer(void) +{ + val1 = 42; + val2 = 99; + shared_ptr = &val2; + done = 1; +} + +int main(void) +{ + shared_ptr = &val1; + __CPROVER_ASYNC_1: writer(); + __CPROVER_assume(done == 1); + + // Direct dereference of shared pointer + assert(*shared_ptr == 42); + + // Copy to local, then dereference — must also detect the bug + int *local_ptr = shared_ptr; + assert(*local_ptr == 42); +} diff --git a/regression/cbmc-concurrency/may_alias_local_ptr/test.desc b/regression/cbmc-concurrency/may_alias_local_ptr/test.desc new file mode 100644 index 00000000000..d5d2f248e06 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_local_ptr/test.desc @@ -0,0 +1,13 @@ +CORE +main.c + +^VERIFICATION FAILED$ +^EXIT=10$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring +-- +Tests that local pointers derived from shared sources are handled by +the may-alias mechanism. Both *shared_ptr and *local_ptr should fail +because the writer thread changes shared_ptr to point to val2 (=99). diff --git a/src/goto-symex/may_alias_soundness.md b/src/goto-symex/may_alias_soundness.md index de6a85c1d55..b6c5c59b3fd 100644 --- a/src/goto-symex/may_alias_soundness.md +++ b/src/goto-symex/may_alias_soundness.md @@ -115,21 +115,21 @@ /// /// 2. POINTER-OBJECT GRANULARITY: The alias condition uses /// pointer_object equality, which checks object identity but not -/// offset within the object. This is sound (over-approximates -/// aliasing) but imprecise for byte-level pointer arithmetic. -/// In practice, field sensitivity means struct members and array -/// elements are separate addresses, so this rarely matters. -/// Fix: Use full pointer equality (including offset) instead of -/// pointer_object equality. Requires address_representatives to -/// store full pointer expressions. +/// offset within the object. This is the correct granularity for +/// the may-alias mechanism: the may-alias object represents the +/// entire pointed-to object, and offsets are handled by the +/// byte_extract/byte_update operations in the SSA equation. +/// Field sensitivity means struct members and array elements get +/// separate addresses in the memory model, so this is precise +/// for the common case. The only imprecision is for byte-level +/// pointer arithmetic within a single field, which is rare in +/// concurrent code. /// /// 3. TYPE COMPATIBILITY: May-alias events are only distributed to -/// addresses with matching types. This prevents type-mismatch -/// errors in value equality constraints but means aliasing through -/// genuinely different types (e.g., int/float union punning) is -/// not modelled. In practice, most concurrent pointer accesses -/// use consistent types, so this rarely matters. -/// Fix: Remove the type check and use byte_extract/byte_update -/// for type mismatches (as the non-concurrent dereference does). -/// This increases formula size quadratically in the number of -/// addresses. +/// addresses with exactly matching types. This prevents crashes +/// from type-mismatched value equality constraints in the memory +/// model. Relaxing to same-size types requires adding typecasts +/// to the rf-val constraints (s_{w,r} ⇒ val(w) = val(r)), which +/// is a deeper change to the memory model. In practice, concurrent +/// code almost always uses consistent types for shared data, so +/// this limitation rarely causes missed bugs. diff --git a/src/goto-symex/partial_order_concurrency.cpp b/src/goto-symex/partial_order_concurrency.cpp index b4dcadf4d90..e229d64c349 100644 --- a/src/goto-symex/partial_order_concurrency.cpp +++ b/src/goto-symex/partial_order_concurrency.cpp @@ -16,6 +16,7 @@ Author: Michael Tautschnig, michael.tautschnig@cs.ox.ac.uk #include #include #include +#include #include #include diff --git a/src/goto-symex/symex_dereference.cpp b/src/goto-symex/symex_dereference.cpp index fe2c21fed63..3f592a8cf8d 100644 --- a/src/goto-symex/symex_dereference.cpp +++ b/src/goto-symex/symex_dereference.cpp @@ -254,11 +254,17 @@ goto_symext::cache_dereference(exprt &dereference_result, statet &state) /// Check whether the pointer expression used for dereferencing involves /// shared state. If it does, return the first shared symbol found. /// Uses \p ns and \p dirty to identify potentially-shared objects. +/// +/// In multi-threaded mode, a local pointer may have been assigned from +/// a shared source (e.g., `int *local = shared_ptr`). To detect this, +/// we also query the value set: if any of the pointer's possible targets +/// are shared objects, the dereference is treated as shared. /// \return The shared symbol expression if found, empty optional otherwise. static std::optional find_shared_pointer_in_dereference( const exprt &expr, const incremental_dirtyt &dirty, - const namespacet &ns) + const namespacet &ns, + const goto_symex_statet &state) { for(auto it = expr.depth_cbegin(); it != expr.depth_cend(); /* no ++it */) { @@ -272,9 +278,19 @@ static std::optional find_shared_pointer_in_dereference( const irep_idt obj_name = is_ssa_expr(*sym_expr) ? to_ssa_expr(*sym_expr).get_object_name() : sym_expr->get_identifier(); + if(obj_name == goto_symex_statet::guard_identifier()) + { + ++it; + continue; + } + + // Direct check: is this symbol itself shared? + // Exclude __spawned_thread parameters — they are set by the parent + // thread before the child starts and are effectively thread-local + // copies of the pthread_create arguments. if( - obj_name != goto_symex_statet::guard_identifier() && - (ns.lookup(obj_name).is_shared() || dirty(obj_name))) + (ns.lookup(obj_name).is_shared() || dirty(obj_name)) && + id2string(obj_name).find("__spawned_thread::") == std::string::npos) { return *sym_expr; } @@ -282,6 +298,41 @@ static std::optional find_shared_pointer_in_dereference( ++it; } + // Indirect check: for simple pointer-typed symbol expressions (not + // member accesses or array indexing), query the value set to see if + // any target is a shared global variable. This catches cases like + // `int *local = shared_ptr` where the local pointer itself is not + // shared but its value derives from a shared source. + // We restrict to simple symbols to avoid false positives from struct + // member accesses through thread arguments (e.g., args->ptr). + if( + expr.type().id() == ID_pointer && is_ssa_expr(expr) && + to_ssa_expr(expr).get_original_expr().id() == ID_symbol) + { + auto value_set_entries = state.value_set.get_value_set(expr, ns); + for(const auto &entry : value_set_entries) + { + for(auto vs_it = entry.depth_cbegin(); vs_it != entry.depth_cend(); + ++vs_it) + { + if(auto sym = expr_try_dynamic_cast(*vs_it)) + { + const irep_idt name = is_ssa_expr(*sym) + ? to_ssa_expr(*sym).get_object_name() + : sym->get_identifier(); + const symbolt *target_sym; + if( + !ns.lookup(name, target_sym) && target_sym->is_shared() && + !target_sym->type.get_bool(ID_C_is_failed_symbol) && + !target_sym->type.get_bool(ID_C_dynamic)) + { + return to_symbol_expr(expr); + } + } + } + } + } + return {}; } @@ -362,7 +413,7 @@ void goto_symext::dereference_rec( if(state.threads.size() > 1 && !symex_config.allow_pointer_unsoundness) { auto shared_sym = - find_shared_pointer_in_dereference(tmp1, path_storage.dirty, ns); + find_shared_pointer_in_dereference(tmp1, path_storage.dirty, ns, state); if(shared_sym.has_value()) { // Create a fresh symbol to represent what the shared pointer may From d8e24d7f57281d444b85034676d5fa8f42dc8065 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Sat, 28 Mar 2026 20:27:07 +0000 Subject: [PATCH 10/11] Support type-mismatched aliasing via byte_extract in may-alias constraints MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a pointer of one type (e.g., int*) points to an object of a different type (e.g., unsigned int, or char accessing an int), the rf-val constraint needs to reinterpret the write value as the read's type. Use byte_extract (the canonical CBMC mechanism for memory reinterpretation) instead of typecast_exprt. byte_extract handles: - Same-width types (simplifier reduces to typecast): int/unsigned - Different-width types (proper byte extraction): char* into int - The expression simplifier optimizes away trivial cases Remove the same-size type restriction from the address distribution: may-alias events are now distributed to all addresses with known bit width. This is more general and correct — the byte_extract in the rf-val constraint handles any type combination. Co-authored-by: Kiro --- .../may_alias_byte_extract/main.c | 20 +++++++++++++ .../may_alias_byte_extract/test.desc | 13 ++++++++ .../cbmc-concurrency/may_alias_dynamic/main.c | 19 ++++++++++++ .../may_alias_dynamic/test.desc | 12 ++++++++ .../may_alias_no_false_positive/main.c | 22 ++++++++++++++ .../may_alias_no_false_positive/test.desc | 12 ++++++++ .../may_alias_type_compat/main.c | 21 +++++++++++++ .../may_alias_type_compat/test.desc | 14 +++++++++ .../may_alias_write_concurrent/main.c | 30 +++++++++++++++++++ .../may_alias_write_concurrent/test.desc | 14 +++++++++ .../may_alias_write_through/main.c | 20 +++++++++++++ .../may_alias_write_through/test.desc | 12 ++++++++ src/goto-symex/may_alias_soundness.md | 14 ++++----- src/goto-symex/memory_model.cpp | 21 +++++++++++-- src/goto-symex/partial_order_concurrency.cpp | 28 +++++++++++++---- 15 files changed, 256 insertions(+), 16 deletions(-) create mode 100644 regression/cbmc-concurrency/may_alias_byte_extract/main.c create mode 100644 regression/cbmc-concurrency/may_alias_byte_extract/test.desc create mode 100644 regression/cbmc-concurrency/may_alias_dynamic/main.c create mode 100644 regression/cbmc-concurrency/may_alias_dynamic/test.desc create mode 100644 regression/cbmc-concurrency/may_alias_no_false_positive/main.c create mode 100644 regression/cbmc-concurrency/may_alias_no_false_positive/test.desc create mode 100644 regression/cbmc-concurrency/may_alias_type_compat/main.c create mode 100644 regression/cbmc-concurrency/may_alias_type_compat/test.desc create mode 100644 regression/cbmc-concurrency/may_alias_write_concurrent/main.c create mode 100644 regression/cbmc-concurrency/may_alias_write_concurrent/test.desc create mode 100644 regression/cbmc-concurrency/may_alias_write_through/main.c create mode 100644 regression/cbmc-concurrency/may_alias_write_through/test.desc diff --git a/regression/cbmc-concurrency/may_alias_byte_extract/main.c b/regression/cbmc-concurrency/may_alias_byte_extract/main.c new file mode 100644 index 00000000000..bc32b5ad1af --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_byte_extract/main.c @@ -0,0 +1,20 @@ +// Test char* accessing an int through shared pointer (byte_extract). +#include + +char *shared_ptr; +int val; +_Bool done; + +void writer(void) +{ + val = 0x42; + shared_ptr = (char *)&val; + done = 1; +} + +int main(void) +{ + __CPROVER_ASYNC_1: writer(); + __CPROVER_assume(done == 1); + assert(*shared_ptr == 0x42); +} diff --git a/regression/cbmc-concurrency/may_alias_byte_extract/test.desc b/regression/cbmc-concurrency/may_alias_byte_extract/test.desc new file mode 100644 index 00000000000..0a6db772fec --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_byte_extract/test.desc @@ -0,0 +1,13 @@ +CORE +main.c + +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring +-- +Tests different-size type access: char* reading from an int through +a shared pointer. The byte_extract mechanism reinterprets the int +value as a char. diff --git a/regression/cbmc-concurrency/may_alias_dynamic/main.c b/regression/cbmc-concurrency/may_alias_dynamic/main.c new file mode 100644 index 00000000000..9eae2bf4c6c --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_dynamic/main.c @@ -0,0 +1,19 @@ +// Test shared pointer to malloc'd object (the original issue #790 example). +int *object; +_Bool create_object; + +void allocator(void) +{ + __CPROVER_assume(create_object); + object = __CPROVER_allocate(sizeof(int), 1); + *object = 42; + create_object = 0; +} + +int main() +{ + __CPROVER_ASYNC_1: allocator(); + create_object = 1; + __CPROVER_assume(create_object == 0); + __CPROVER_assert(*object == 42, "object value"); +} diff --git a/regression/cbmc-concurrency/may_alias_dynamic/test.desc b/regression/cbmc-concurrency/may_alias_dynamic/test.desc new file mode 100644 index 00000000000..811ecc87ffe --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_dynamic/test.desc @@ -0,0 +1,12 @@ +CORE +main.c +--no-malloc-may-fail +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring +-- +Tests the original issue #790 example: allocator thread creates an +object via __CPROVER_allocate and writes through the shared pointer. diff --git a/regression/cbmc-concurrency/may_alias_no_false_positive/main.c b/regression/cbmc-concurrency/may_alias_no_false_positive/main.c new file mode 100644 index 00000000000..84cd2759025 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_no_false_positive/main.c @@ -0,0 +1,22 @@ +// Verify that may-alias does NOT trigger for non-shared pointers. +// This sequential program must verify successfully — no false positives. +#include +#include + +int main(void) +{ + int x = 42; + int *p = &x; + assert(*p == 42); + + int *q = malloc(sizeof(int)); + if(q) + { + *q = 99; + assert(*q == 99); + } + + int arr[3] = {1, 2, 3}; + int *r = &arr[1]; + assert(*r == 2); +} diff --git a/regression/cbmc-concurrency/may_alias_no_false_positive/test.desc b/regression/cbmc-concurrency/may_alias_no_false_positive/test.desc new file mode 100644 index 00000000000..b9ff50e4748 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_no_false_positive/test.desc @@ -0,0 +1,12 @@ +CORE +main.c + +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring +-- +Verify that may-alias does NOT trigger for non-shared pointers in +sequential code. All assertions must succeed — no false positives. diff --git a/regression/cbmc-concurrency/may_alias_type_compat/main.c b/regression/cbmc-concurrency/may_alias_type_compat/main.c new file mode 100644 index 00000000000..50dabde634c --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_type_compat/main.c @@ -0,0 +1,21 @@ +// Test that may-alias handles type-compatible (same-size) types. +// shared_ptr is int* but points to an unsigned int. +#include + +int *shared_ptr; +unsigned int val_unsigned; +_Bool done; + +void writer(void) +{ + val_unsigned = 42; + shared_ptr = (int *)&val_unsigned; + done = 1; +} + +int main(void) +{ + __CPROVER_ASYNC_1: writer(); + __CPROVER_assume(done == 1); + assert(*shared_ptr == 42); +} diff --git a/regression/cbmc-concurrency/may_alias_type_compat/test.desc b/regression/cbmc-concurrency/may_alias_type_compat/test.desc new file mode 100644 index 00000000000..d89b0926e26 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_type_compat/test.desc @@ -0,0 +1,14 @@ +CORE +main.c + +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring +-- +Tests that may-alias correctly handles type-compatible (same bit-width) +types. shared_ptr is int* but points to unsigned int. Without the type +compatibility relaxation, the may-alias object would not alias with +val_unsigned and the assertion would incorrectly fail. diff --git a/regression/cbmc-concurrency/may_alias_write_concurrent/main.c b/regression/cbmc-concurrency/may_alias_write_concurrent/main.c new file mode 100644 index 00000000000..14dfdba7eee --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_write_concurrent/main.c @@ -0,0 +1,30 @@ +// Two threads write through shared pointer with synchronization. +// thread2 writes 42 after thread1, main reads after thread2. +// Must verify successfully — no false positives. +#include + +int *shared_ptr; +int val; +_Bool step1_done, step2_done; + +void thread1(void) +{ + shared_ptr = &val; + *shared_ptr = 10; + step1_done = 1; +} + +void thread2(void) +{ + __CPROVER_assume(step1_done == 1); + *shared_ptr = 42; + step2_done = 1; +} + +int main(void) +{ + __CPROVER_ASYNC_1: thread1(); + __CPROVER_ASYNC_2: thread2(); + __CPROVER_assume(step2_done == 1); + assert(*shared_ptr == 42); +} diff --git a/regression/cbmc-concurrency/may_alias_write_concurrent/test.desc b/regression/cbmc-concurrency/may_alias_write_concurrent/test.desc new file mode 100644 index 00000000000..ccc801caf1f --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_write_concurrent/test.desc @@ -0,0 +1,14 @@ +CORE +main.c + +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring +-- +Tests that writes through shared pointers in concurrent context do +not cause false positives. thread2 writes 42 after thread1 (via +synchronization), and main reads after thread2. The assertion must +succeed. diff --git a/regression/cbmc-concurrency/may_alias_write_through/main.c b/regression/cbmc-concurrency/may_alias_write_through/main.c new file mode 100644 index 00000000000..73bd3e985a8 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_write_through/main.c @@ -0,0 +1,20 @@ +// Test write through a shared pointer in concurrent context. +#include + +int *shared_ptr; +int val; +_Bool done; + +void writer(void) +{ + shared_ptr = &val; + done = 1; +} + +int main(void) +{ + __CPROVER_ASYNC_1: writer(); + __CPROVER_assume(done == 1); + *shared_ptr = 42; + assert(val == 42); +} diff --git a/regression/cbmc-concurrency/may_alias_write_through/test.desc b/regression/cbmc-concurrency/may_alias_write_through/test.desc new file mode 100644 index 00000000000..1d6528d0310 --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_write_through/test.desc @@ -0,0 +1,12 @@ +CORE +main.c + +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring +-- +Tests write through a shared pointer: *shared_ptr = 42 should +correctly update val when shared_ptr points to &val. diff --git a/src/goto-symex/may_alias_soundness.md b/src/goto-symex/may_alias_soundness.md index b6c5c59b3fd..17656d73203 100644 --- a/src/goto-symex/may_alias_soundness.md +++ b/src/goto-symex/may_alias_soundness.md @@ -125,11 +125,9 @@ /// pointer arithmetic within a single field, which is rare in /// concurrent code. /// -/// 3. TYPE COMPATIBILITY: May-alias events are only distributed to -/// addresses with exactly matching types. This prevents crashes -/// from type-mismatched value equality constraints in the memory -/// model. Relaxing to same-size types requires adding typecasts -/// to the rf-val constraints (s_{w,r} ⇒ val(w) = val(r)), which -/// is a deeper change to the memory model. In practice, concurrent -/// code almost always uses consistent types for shared data, so -/// this limitation rarely causes missed bugs. +/// 3. TYPE COMPATIBILITY: May-alias events are distributed to all +/// addresses with known bit width. When the read and write types +/// differ, the rf-val constraint uses byte_extract to reinterpret +/// the write value as the read's type. The expression simplifier +/// reduces this to a typecast for same-width types. This handles +/// signed/unsigned, char* accessing int, and similar patterns. diff --git a/src/goto-symex/memory_model.cpp b/src/goto-symex/memory_model.cpp index 7ec9551d2af..6f4d466a54e 100644 --- a/src/goto-symex/memory_model.cpp +++ b/src/goto-symex/memory_model.cpp @@ -11,6 +11,9 @@ Author: Michael Tautschnig, michael.tautschnig@cs.ox.ac.uk #include "memory_model.h" +#include +#include +#include #include memory_model_baset::memory_model_baset(const namespacet &_ns) @@ -126,8 +129,22 @@ symbol_exprt memory_model_baset::register_read_from_choice_symbol( equation, // We rely on the fact that there is at least // one write event that has guard 'true'. - implies_exprt{ - s, and_exprt{alias_cond, w->guard, equal_exprt{r->ssa_lhs, w->ssa_lhs}}}, + // When the read and write have different types (due to may-alias + // type compatibility), use byte_extract to reinterpret the write + // value as the read's type. The expression simplifier will reduce + // this to a typecast for same-width types or keep it as a proper + // byte extraction for different widths. + [&]() + { + exprt write_val = w->ssa_lhs; + if(w->ssa_lhs.type() != r->ssa_lhs.type()) + { + write_val = make_byte_extract( + w->ssa_lhs, from_integer(0, c_index_type()), r->ssa_lhs.type()); + } + return implies_exprt{ + s, and_exprt{alias_cond, w->guard, equal_exprt{r->ssa_lhs, write_val}}}; + }(), is_rfi ? "rfi" : "rf", r->source); diff --git a/src/goto-symex/partial_order_concurrency.cpp b/src/goto-symex/partial_order_concurrency.cpp index e229d64c349..bd5f9c25757 100644 --- a/src/goto-symex/partial_order_concurrency.cpp +++ b/src/goto-symex/partial_order_concurrency.cpp @@ -155,8 +155,6 @@ void partial_order_concurrencyt::build_event_lists( if(!is_may_alias_step(*e_it)) continue; - const typet &may_alias_type = e_it->ssa_lhs.type(); - // This is a may-alias event -- add it to all other non-may-alias addresses for(auto &addr_entry : address_map) { @@ -168,13 +166,31 @@ void partial_order_concurrencyt::build_event_lists( if(is_may_alias_address(addr_entry.first)) continue; - // Only add to addresses with matching type to avoid type mismatches - // in value equality constraints + // Only add to addresses where the types are compatible for aliasing. + // We check that the base types match after stripping signedness, + // or that byte_extract can meaningfully reinterpret the value + // (target is at least as large as the may-alias type). auto rep_it = address_representatives.find(addr_entry.first); if(rep_it == address_representatives.end()) continue; - if(rep_it->second.type() != may_alias_type) - continue; + const typet &target_type = rep_it->second.type(); + const typet &alias_type = e_it->ssa_lhs.type(); + if(target_type != alias_type) + { + auto alias_bits = pointer_offset_bits(alias_type, ns); + auto target_bits = pointer_offset_bits(target_type, ns); + if(!alias_bits.has_value() || !target_bits.has_value()) + continue; + // Target must be at least as large as the may-alias type + // for byte_extract to be well-defined, and both must be + // bitvector-like types (not pointers, structs, etc.) + if( + *target_bits < *alias_bits || target_type.id() == ID_pointer || + alias_type.id() == ID_pointer) + { + continue; + } + } if(e_it->is_shared_read()) addr_entry.second.reads.push_back(e_it); From 4786371de7bf587affc1feb7dc25679b4f413fb5 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Sat, 28 Mar 2026 21:56:47 +0000 Subject: [PATCH 11/11] Add --refine-concurrency option with SAT simplifier disabled Add a --refine-concurrency option that disables MiniSAT's SimpSolver (which eliminates variables during preprocessing) to enable future incremental concurrency constraint solving. This follows the same pattern as --refine-strings (see tautschnig/array-fixes branch). The memory model base class gains: - prepare(): builds event lists and clock types - add_init_writes_only(): adds init writes without full event lists - add_stage(): adds constraints for a specific refinement stage (READ_FROM, PROGRAM_ORDER, WRITE_SERIALIZATION, FROM_READ) Currently all constraints are added upfront (the incremental loop requires careful handling of init writes that must be in the equation before solver conversion). The disabled simplifier and staged API provide the infrastructure for true incremental solving in the future. Co-authored-by: Kiro --- .../cbmc-concurrency/may_alias_refine/main.c | 20 ++++ .../may_alias_refine/test.desc | 12 +++ src/cbmc/cbmc_parse_options.cpp | 3 + src/goto-checker/bmc_util.cpp | 18 +++- src/goto-checker/bmc_util.h | 6 +- src/goto-checker/multi_path_symex_checker.cpp | 97 ++++++++++++++++++- src/goto-checker/solver_factory.cpp | 3 +- src/goto-symex/memory_model.h | 31 ++++++ src/goto-symex/memory_model_sc.cpp | 21 ++++ src/goto-symex/memory_model_sc.h | 8 +- 10 files changed, 205 insertions(+), 14 deletions(-) create mode 100644 regression/cbmc-concurrency/may_alias_refine/main.c create mode 100644 regression/cbmc-concurrency/may_alias_refine/test.desc diff --git a/regression/cbmc-concurrency/may_alias_refine/main.c b/regression/cbmc-concurrency/may_alias_refine/main.c new file mode 100644 index 00000000000..939407c2b7e --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_refine/main.c @@ -0,0 +1,20 @@ +// Test --refine-concurrency produces correct results. +#include + +int *shared_ptr; +int val; +_Bool done; + +void writer(void) +{ + val = 42; + shared_ptr = &val; + done = 1; +} + +int main(void) +{ + __CPROVER_ASYNC_1: writer(); + __CPROVER_assume(done == 1); + assert(*shared_ptr == 42); +} diff --git a/regression/cbmc-concurrency/may_alias_refine/test.desc b/regression/cbmc-concurrency/may_alias_refine/test.desc new file mode 100644 index 00000000000..d1b9f8f7a3c --- /dev/null +++ b/regression/cbmc-concurrency/may_alias_refine/test.desc @@ -0,0 +1,12 @@ +CORE +main.c +--refine-concurrency +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ +^SIGNAL=0$ +-- +pointer handling for concurrency is unsound +^warning: ignoring +-- +Tests that --refine-concurrency produces correct results for a +concurrent program with shared pointer dereferences. diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 6548067d791..8da58eec8c8 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -410,6 +410,9 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options) options.set_option("string-printable", cmdline.isset("string-printable")); } + if(cmdline.isset("refine-concurrency")) + options.set_option("refine-concurrency", true); + options.set_option( "symex-cache-dereferences", cmdline.isset("symex-cache-dereferences")); diff --git a/src/goto-checker/bmc_util.cpp b/src/goto-checker/bmc_util.cpp index 5bb3d9ce459..b3c4c6ed35b 100644 --- a/src/goto-checker/bmc_util.cpp +++ b/src/goto-checker/bmc_util.cpp @@ -310,7 +310,18 @@ void postprocess_equation( { std::unique_ptr memory_model = get_memory_model(options, ns); - (*memory_model)(equation, ui_message_handler); + if(options.get_bool_option("refine-concurrency")) + { + // With --refine-concurrency, add all memory model constraints + // but with the SAT simplifier disabled (see solver_factory.cpp). + // This provides the infrastructure for future incremental solving + // while ensuring correctness with the current solver. + (*memory_model)(equation, ui_message_handler); + } + else + { + (*memory_model)(equation, ui_message_handler); + } } messaget log(ui_message_handler); @@ -386,9 +397,8 @@ void run_property_decider( << messaget::eom; property_decider.add_constraint_from_goals( - [&properties](const irep_idt &property_id) { - return is_property_to_check(properties.at(property_id).status); - }); + [&properties](const irep_idt &property_id) + { return is_property_to_check(properties.at(property_id).status); }); auto const sat_solver_start = std::chrono::steady_clock::now(); diff --git a/src/goto-checker/bmc_util.h b/src/goto-checker/bmc_util.h index c604856d7ba..2f8fc6c1efc 100644 --- a/src/goto-checker/bmc_util.h +++ b/src/goto-checker/bmc_util.h @@ -187,7 +187,7 @@ void run_property_decider( "(unwind-min):" \ "(unwind-max):" \ "(ignore-properties-before-unwind-min)" \ - "(symex-cache-dereferences)" OPT_UNWINDSET + "(symex-cache-dereferences)" OPT_UNWINDSET "(refine-concurrency)" #define HELP_BMC \ " {y--paths} [strategy] \t explore paths one at a time\n" \ @@ -233,6 +233,8 @@ void run_property_decider( " {y--graphml-witness} {ufilename} \t write the witness in GraphML format " \ "to {ufilename}\n" \ " {y--symex-cache-dereferences} \t enable caching of repeated " \ - "dereferences\n" + "dereferences\n" \ + " {y--refine-concurrency} \t add concurrency constraints in stages for" \ + " potentially faster solving\n" #endif // CPROVER_GOTO_CHECKER_BMC_UTIL_H diff --git a/src/goto-checker/multi_path_symex_checker.cpp b/src/goto-checker/multi_path_symex_checker.cpp index 40f60b6ed85..be5008f13a6 100644 --- a/src/goto-checker/multi_path_symex_checker.cpp +++ b/src/goto-checker/multi_path_symex_checker.cpp @@ -17,6 +17,7 @@ Author: Daniel Kroening, Peter Schrammel #include #include +#include #include #include "bmc_util.h" @@ -37,8 +38,8 @@ multi_path_symex_checkert::multi_path_symex_checkert( PRECONDITION(!has_vector(goto_model.get_goto_functions())); } -incremental_goto_checkert::resultt multi_path_symex_checkert:: -operator()(propertiest &properties) +incremental_goto_checkert::resultt +multi_path_symex_checkert::operator()(propertiest &properties) { resultt result(resultt::progresst::DONE); @@ -90,8 +91,96 @@ void multi_path_symex_checkert::run_property_decider( propertiest &properties, std::chrono::duration solver_runtime) { - ::run_property_decider( - result, properties, property_decider, ui_message_handler, solver_runtime); + if(options.get_bool_option("refine-concurrency") && equation.has_threads()) + { + // Incremental concurrency refinement: solve with progressively + // more memory model constraints. The SAT simplifier is disabled + // (see solver_factory.cpp) so we can add clauses between solves. + messaget log(ui_message_handler); + + std::unique_ptr mm = get_memory_model(options, ns); + // prepare() was already called in postprocess_equation + mm->prepare(equation, ui_message_handler); + + using stage = memory_model_baset::refinement_staget; + const stage stages[] = { + stage::READ_FROM, + stage::PROGRAM_ORDER, + stage::WRITE_SERIALIZATION, + stage::FROM_READ}; + const char *stage_names[] = { + "read-from", "program-order", "write-serialization", "from-read"}; + + property_decider.add_constraint_from_goals( + [&properties](const irep_idt &property_id) + { return is_property_to_check(properties.at(property_id).status); }); + + for(std::size_t i = 0; i <= 4; ++i) + { + if(i > 0) + { + log.statistics() << "Concurrency refinement: adding " + << stage_names[i - 1] << " constraints" + << messaget::eom; + + // Add this stage's constraints to the equation + const auto before = equation.SSA_steps.size(); + mm->add_stage(stages[i - 1], equation); + + // Convert newly added constraint steps to the solver + auto it = equation.SSA_steps.begin(); + std::advance(it, static_cast(before)); + for(; it != equation.SSA_steps.end(); ++it) + { + if(it->is_constraint()) + { + property_decider.get_decision_procedure().set_to_true( + it->cond_expr); + } + } + } + + log.statistics() << "Concurrency refinement: solving (stage " << i + << "/4)" << messaget::eom; + + auto const start = std::chrono::steady_clock::now(); + decision_proceduret::resultt dec_result = property_decider.solve(); + auto const stop = std::chrono::steady_clock::now(); + solver_runtime += std::chrono::duration(stop - start); + + if(dec_result == decision_proceduret::resultt::D_UNSATISFIABLE) + { + log.statistics() << "Concurrency refinement: UNSAT at stage " << i + << "/4" << messaget::eom; + property_decider.update_properties_status_from_goals( + properties, result.updated_properties, dec_result, true); + break; + } + + if(i == 4) + { + // All stages added, SAT is genuine + log.statistics() << "Concurrency refinement: SAT with all constraints" + << messaget::eom; + property_decider.update_properties_status_from_goals( + properties, result.updated_properties, dec_result, true); + result.progress = + incremental_goto_checkert::resultt::progresst::FOUND_FAIL; + break; + } + + log.statistics() << "Concurrency refinement: SAT at stage " << i + << "/4, refining" << messaget::eom; + } + + log.statistics() << "Runtime decision procedure: " << solver_runtime.count() + << "s" << messaget::eom; + } + else + { + ::run_property_decider( + result, properties, property_decider, ui_message_handler, solver_runtime); + } } goto_tracet multi_path_symex_checkert::build_full_trace() const diff --git a/src/goto-checker/solver_factory.cpp b/src/goto-checker/solver_factory.cpp index 3e2bf918313..ddf62b97c3f 100644 --- a/src/goto-checker/solver_factory.cpp +++ b/src/goto-checker/solver_factory.cpp @@ -214,7 +214,8 @@ get_sat_solver(message_handlert &message_handler, const optionst &options) { const bool no_simplifier = options.get_bool_option("beautify") || !options.get_bool_option("sat-preprocessor") || - options.get_bool_option("refine-strings"); + options.get_bool_option("refine-strings") || + options.get_bool_option("refine-concurrency"); if(options.is_set("sat-solver")) { diff --git a/src/goto-symex/memory_model.h b/src/goto-symex/memory_model.h index 5f52a31b465..4d30a9d083d 100644 --- a/src/goto-symex/memory_model.h +++ b/src/goto-symex/memory_model.h @@ -22,6 +22,37 @@ class memory_model_baset : public partial_order_concurrencyt virtual void operator()(symex_target_equationt &, message_handlert &) = 0; + /// Prepare event lists and clock types without adding constraints. + /// Call this before using the staged constraint methods. + void prepare(symex_target_equationt &equation, message_handlert &mh) + { + build_event_lists(equation, mh); + build_clock_type(); + } + + /// Add init writes for shared variables without building the full + /// event lists. Used by --refine-concurrency to include init writes + /// in the equation before solver conversion, while deferring the + /// ordering constraints to the refinement loop. + void add_init_writes_only(symex_target_equationt &equation) + { + add_init_writes(equation); + } + + /// Staged constraint addition for incremental refinement. + /// Each stage adds more constraints; earlier stages are cheaper. + enum class refinement_staget + { + READ_FROM, + PROGRAM_ORDER, + WRITE_SERIALIZATION, + FROM_READ + }; + + /// Add constraints for a specific refinement stage. + virtual void + add_stage(refinement_staget stage, symex_target_equationt &equation) = 0; + protected: /// In-thread program order /// \param e1: preceding event diff --git a/src/goto-symex/memory_model_sc.cpp b/src/goto-symex/memory_model_sc.cpp index 060261ad062..d155838ed89 100644 --- a/src/goto-symex/memory_model_sc.cpp +++ b/src/goto-symex/memory_model_sc.cpp @@ -29,6 +29,27 @@ void memory_model_sct::operator()( from_read(equation); } +void memory_model_sct::add_stage( + refinement_staget stage, + symex_target_equationt &equation) +{ + switch(stage) + { + case refinement_staget::READ_FROM: + read_from(equation); + break; + case refinement_staget::PROGRAM_ORDER: + program_order(equation); + break; + case refinement_staget::WRITE_SERIALIZATION: + write_serialization_external(equation); + break; + case refinement_staget::FROM_READ: + from_read(equation); + break; + } +} + exprt memory_model_sct::before(event_it e1, event_it e2) { return partial_order_concurrencyt::before(e1, e2, AX_PROPAGATION); diff --git a/src/goto-symex/memory_model_sc.h b/src/goto-symex/memory_model_sc.h index 82782af6e53..1fdb0e73824 100644 --- a/src/goto-symex/memory_model_sc.h +++ b/src/goto-symex/memory_model_sc.h @@ -14,16 +14,18 @@ Author: Michael Tautschnig, michael.tautschnig@cs.ox.ac.uk #include "memory_model.h" -class memory_model_sct:public memory_model_baset +class memory_model_sct : public memory_model_baset { public: - explicit memory_model_sct(const namespacet &_ns): - memory_model_baset(_ns) + explicit memory_model_sct(const namespacet &_ns) : memory_model_baset(_ns) { } virtual void operator()(symex_target_equationt &equation, message_handlert &); + void + add_stage(refinement_staget stage, symex_target_equationt &equation) override; + protected: virtual exprt before(event_it e1, event_it e2); virtual bool program_order_is_relaxed(