15a83710eSEric Fiselier //===----------------------------------------------------------------------===// 25a83710eSEric Fiselier // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65a83710eSEric Fiselier // 75a83710eSEric Fiselier //===----------------------------------------------------------------------===// 85a83710eSEric Fiselier // 95a83710eSEric Fiselier // UNSUPPORTED: libcpp-has-no-threads 105a83710eSEric Fiselier 11ae2c8de6SEric Fiselier // This test hangs forever when built against libstdc++ and MSVC. In order to allow 1276e316f9SEric Fiselier // validation of the test suite against other STLs we have to mark it 1376e316f9SEric Fiselier // unsupported. 14ae2c8de6SEric Fiselier // UNSUPPORTED: libstdc++, msvc 1576e316f9SEric Fiselier 165a83710eSEric Fiselier // <mutex> 175a83710eSEric Fiselier 185a83710eSEric Fiselier // template <class L1, class L2, class... L3> 195a83710eSEric Fiselier // void lock(L1&, L2&, L3&...); 205a83710eSEric Fiselier 215a83710eSEric Fiselier #include <mutex> 225a83710eSEric Fiselier #include <cassert> 235a83710eSEric Fiselier 2460d6ef63SRoger Ferrer Ibanez #include "test_macros.h" 2560d6ef63SRoger Ferrer Ibanez 265a83710eSEric Fiselier class L0 275a83710eSEric Fiselier { 285a83710eSEric Fiselier bool locked_; 295a83710eSEric Fiselier 305a83710eSEric Fiselier public: 315a83710eSEric Fiselier L0() : locked_(false) {} 325a83710eSEric Fiselier 335a83710eSEric Fiselier void lock() 345a83710eSEric Fiselier { 355a83710eSEric Fiselier locked_ = true; 365a83710eSEric Fiselier } 375a83710eSEric Fiselier 385a83710eSEric Fiselier bool try_lock() 395a83710eSEric Fiselier { 405a83710eSEric Fiselier locked_ = true; 415a83710eSEric Fiselier return locked_; 425a83710eSEric Fiselier } 435a83710eSEric Fiselier 445a83710eSEric Fiselier void unlock() {locked_ = false;} 455a83710eSEric Fiselier 465a83710eSEric Fiselier bool locked() const {return locked_;} 475a83710eSEric Fiselier }; 485a83710eSEric Fiselier 495a83710eSEric Fiselier class L1 505a83710eSEric Fiselier { 515a83710eSEric Fiselier bool locked_; 525a83710eSEric Fiselier 535a83710eSEric Fiselier public: 545a83710eSEric Fiselier L1() : locked_(false) {} 555a83710eSEric Fiselier 565a83710eSEric Fiselier void lock() 575a83710eSEric Fiselier { 585a83710eSEric Fiselier locked_ = true; 595a83710eSEric Fiselier } 605a83710eSEric Fiselier 615a83710eSEric Fiselier bool try_lock() 625a83710eSEric Fiselier { 635a83710eSEric Fiselier locked_ = false; 645a83710eSEric Fiselier return locked_; 655a83710eSEric Fiselier } 665a83710eSEric Fiselier 675a83710eSEric Fiselier void unlock() {locked_ = false;} 685a83710eSEric Fiselier 695a83710eSEric Fiselier bool locked() const {return locked_;} 705a83710eSEric Fiselier }; 715a83710eSEric Fiselier 725a83710eSEric Fiselier class L2 735a83710eSEric Fiselier { 745a83710eSEric Fiselier bool locked_; 755a83710eSEric Fiselier 765a83710eSEric Fiselier public: 775a83710eSEric Fiselier L2() : locked_(false) {} 785a83710eSEric Fiselier 795a83710eSEric Fiselier void lock() 805a83710eSEric Fiselier { 8160d6ef63SRoger Ferrer Ibanez TEST_THROW(1); 825a83710eSEric Fiselier } 835a83710eSEric Fiselier 845a83710eSEric Fiselier bool try_lock() 855a83710eSEric Fiselier { 8660d6ef63SRoger Ferrer Ibanez TEST_THROW(1); 875a83710eSEric Fiselier return locked_; 885a83710eSEric Fiselier } 895a83710eSEric Fiselier 905a83710eSEric Fiselier void unlock() {locked_ = false;} 915a83710eSEric Fiselier 925a83710eSEric Fiselier bool locked() const {return locked_;} 935a83710eSEric Fiselier }; 945a83710eSEric Fiselier 95*2df59c50SJF Bastien int main(int, char**) 965a83710eSEric Fiselier { 975a83710eSEric Fiselier { 985a83710eSEric Fiselier L0 l0; 995a83710eSEric Fiselier L0 l1; 1005a83710eSEric Fiselier std::lock(l0, l1); 1015a83710eSEric Fiselier assert(l0.locked()); 1025a83710eSEric Fiselier assert(l1.locked()); 1035a83710eSEric Fiselier } 1045a83710eSEric Fiselier { 1055a83710eSEric Fiselier L0 l0; 1065a83710eSEric Fiselier L1 l1; 1075a83710eSEric Fiselier std::lock(l0, l1); 1085a83710eSEric Fiselier assert(l0.locked()); 1095a83710eSEric Fiselier assert(l1.locked()); 1105a83710eSEric Fiselier } 1115a83710eSEric Fiselier { 1125a83710eSEric Fiselier L1 l0; 1135a83710eSEric Fiselier L0 l1; 1145a83710eSEric Fiselier std::lock(l0, l1); 1155a83710eSEric Fiselier assert(l0.locked()); 1165a83710eSEric Fiselier assert(l1.locked()); 1175a83710eSEric Fiselier } 11860d6ef63SRoger Ferrer Ibanez #ifndef TEST_HAS_NO_EXCEPTIONS 1195a83710eSEric Fiselier { 1205a83710eSEric Fiselier L0 l0; 1215a83710eSEric Fiselier L2 l1; 1225a83710eSEric Fiselier try 1235a83710eSEric Fiselier { 1245a83710eSEric Fiselier std::lock(l0, l1); 1255a83710eSEric Fiselier assert(false); 1265a83710eSEric Fiselier } 1275a83710eSEric Fiselier catch (int) 1285a83710eSEric Fiselier { 1295a83710eSEric Fiselier assert(!l0.locked()); 1305a83710eSEric Fiselier assert(!l1.locked()); 1315a83710eSEric Fiselier } 1325a83710eSEric Fiselier } 1335a83710eSEric Fiselier { 1345a83710eSEric Fiselier L2 l0; 1355a83710eSEric Fiselier L0 l1; 1365a83710eSEric Fiselier try 1375a83710eSEric Fiselier { 1385a83710eSEric Fiselier std::lock(l0, l1); 1395a83710eSEric Fiselier assert(false); 1405a83710eSEric Fiselier } 1415a83710eSEric Fiselier catch (int) 1425a83710eSEric Fiselier { 1435a83710eSEric Fiselier assert(!l0.locked()); 1445a83710eSEric Fiselier assert(!l1.locked()); 1455a83710eSEric Fiselier } 1465a83710eSEric Fiselier } 1475a83710eSEric Fiselier { 1485a83710eSEric Fiselier L1 l0; 1495a83710eSEric Fiselier L2 l1; 1505a83710eSEric Fiselier try 1515a83710eSEric Fiselier { 1525a83710eSEric Fiselier std::lock(l0, l1); 1535a83710eSEric Fiselier assert(false); 1545a83710eSEric Fiselier } 1555a83710eSEric Fiselier catch (int) 1565a83710eSEric Fiselier { 1575a83710eSEric Fiselier assert(!l0.locked()); 1585a83710eSEric Fiselier assert(!l1.locked()); 1595a83710eSEric Fiselier } 1605a83710eSEric Fiselier } 1615a83710eSEric Fiselier { 1625a83710eSEric Fiselier L2 l0; 1635a83710eSEric Fiselier L1 l1; 1645a83710eSEric Fiselier try 1655a83710eSEric Fiselier { 1665a83710eSEric Fiselier std::lock(l0, l1); 1675a83710eSEric Fiselier assert(false); 1685a83710eSEric Fiselier } 1695a83710eSEric Fiselier catch (int) 1705a83710eSEric Fiselier { 1715a83710eSEric Fiselier assert(!l0.locked()); 1725a83710eSEric Fiselier assert(!l1.locked()); 1735a83710eSEric Fiselier } 1745a83710eSEric Fiselier } 1755a83710eSEric Fiselier { 1765a83710eSEric Fiselier L2 l0; 1775a83710eSEric Fiselier L2 l1; 1785a83710eSEric Fiselier try 1795a83710eSEric Fiselier { 1805a83710eSEric Fiselier std::lock(l0, l1); 1815a83710eSEric Fiselier assert(false); 1825a83710eSEric Fiselier } 1835a83710eSEric Fiselier catch (int) 1845a83710eSEric Fiselier { 1855a83710eSEric Fiselier assert(!l0.locked()); 1865a83710eSEric Fiselier assert(!l1.locked()); 1875a83710eSEric Fiselier } 1885a83710eSEric Fiselier } 18960d6ef63SRoger Ferrer Ibanez #endif 190e11fb13bSEric Fiselier #if TEST_STD_VER >= 11 1915a83710eSEric Fiselier { 1925a83710eSEric Fiselier L0 l0; 1935a83710eSEric Fiselier L0 l1; 1945a83710eSEric Fiselier L0 l2; 1955a83710eSEric Fiselier std::lock(l0, l1, l2); 1965a83710eSEric Fiselier assert(l0.locked()); 1975a83710eSEric Fiselier assert(l1.locked()); 1985a83710eSEric Fiselier assert(l2.locked()); 1995a83710eSEric Fiselier } 20060d6ef63SRoger Ferrer Ibanez #ifndef TEST_HAS_NO_EXCEPTIONS 2015a83710eSEric Fiselier { 2025a83710eSEric Fiselier L2 l0; 2035a83710eSEric Fiselier L2 l1; 2045a83710eSEric Fiselier L2 l2; 2055a83710eSEric Fiselier try 2065a83710eSEric Fiselier { 2075a83710eSEric Fiselier std::lock(l0, l1, l2); 2085a83710eSEric Fiselier assert(false); 2095a83710eSEric Fiselier } 2105a83710eSEric Fiselier catch (int) 2115a83710eSEric Fiselier { 2125a83710eSEric Fiselier assert(!l0.locked()); 2135a83710eSEric Fiselier assert(!l1.locked()); 2145a83710eSEric Fiselier assert(!l2.locked()); 2155a83710eSEric Fiselier } 2165a83710eSEric Fiselier } 21760d6ef63SRoger Ferrer Ibanez #endif 2185a83710eSEric Fiselier { 2195a83710eSEric Fiselier L0 l0; 2205a83710eSEric Fiselier L0 l1; 2215a83710eSEric Fiselier L1 l2; 2225a83710eSEric Fiselier std::lock(l0, l1, l2); 2235a83710eSEric Fiselier assert(l0.locked()); 2245a83710eSEric Fiselier assert(l1.locked()); 2255a83710eSEric Fiselier assert(l2.locked()); 2265a83710eSEric Fiselier } 2275a83710eSEric Fiselier { 2285a83710eSEric Fiselier L0 l0; 2295a83710eSEric Fiselier L1 l1; 2305a83710eSEric Fiselier L0 l2; 2315a83710eSEric Fiselier std::lock(l0, l1, l2); 2325a83710eSEric Fiselier assert(l0.locked()); 2335a83710eSEric Fiselier assert(l1.locked()); 2345a83710eSEric Fiselier assert(l2.locked()); 2355a83710eSEric Fiselier } 2365a83710eSEric Fiselier { 2375a83710eSEric Fiselier L1 l0; 2385a83710eSEric Fiselier L0 l1; 2395a83710eSEric Fiselier L0 l2; 2405a83710eSEric Fiselier std::lock(l0, l1, l2); 2415a83710eSEric Fiselier assert(l0.locked()); 2425a83710eSEric Fiselier assert(l1.locked()); 2435a83710eSEric Fiselier assert(l2.locked()); 2445a83710eSEric Fiselier } 24560d6ef63SRoger Ferrer Ibanez #ifndef TEST_HAS_NO_EXCEPTIONS 2465a83710eSEric Fiselier { 2475a83710eSEric Fiselier L0 l0; 2485a83710eSEric Fiselier L0 l1; 2495a83710eSEric Fiselier L2 l2; 2505a83710eSEric Fiselier try 2515a83710eSEric Fiselier { 2525a83710eSEric Fiselier std::lock(l0, l1, l2); 2535a83710eSEric Fiselier assert(false); 2545a83710eSEric Fiselier } 2555a83710eSEric Fiselier catch (int) 2565a83710eSEric Fiselier { 2575a83710eSEric Fiselier assert(!l0.locked()); 2585a83710eSEric Fiselier assert(!l1.locked()); 2595a83710eSEric Fiselier assert(!l2.locked()); 2605a83710eSEric Fiselier } 2615a83710eSEric Fiselier } 2625a83710eSEric Fiselier { 2635a83710eSEric Fiselier L0 l0; 2645a83710eSEric Fiselier L2 l1; 2655a83710eSEric Fiselier L0 l2; 2665a83710eSEric Fiselier try 2675a83710eSEric Fiselier { 2685a83710eSEric Fiselier std::lock(l0, l1, l2); 2695a83710eSEric Fiselier assert(false); 2705a83710eSEric Fiselier } 2715a83710eSEric Fiselier catch (int) 2725a83710eSEric Fiselier { 2735a83710eSEric Fiselier assert(!l0.locked()); 2745a83710eSEric Fiselier assert(!l1.locked()); 2755a83710eSEric Fiselier assert(!l2.locked()); 2765a83710eSEric Fiselier } 2775a83710eSEric Fiselier } 2785a83710eSEric Fiselier { 2795a83710eSEric Fiselier L2 l0; 2805a83710eSEric Fiselier L0 l1; 2815a83710eSEric Fiselier L0 l2; 2825a83710eSEric Fiselier try 2835a83710eSEric Fiselier { 2845a83710eSEric Fiselier std::lock(l0, l1, l2); 2855a83710eSEric Fiselier assert(false); 2865a83710eSEric Fiselier } 2875a83710eSEric Fiselier catch (int) 2885a83710eSEric Fiselier { 2895a83710eSEric Fiselier assert(!l0.locked()); 2905a83710eSEric Fiselier assert(!l1.locked()); 2915a83710eSEric Fiselier assert(!l2.locked()); 2925a83710eSEric Fiselier } 2935a83710eSEric Fiselier } 2945a83710eSEric Fiselier { 2955a83710eSEric Fiselier L2 l0; 2965a83710eSEric Fiselier L2 l1; 2975a83710eSEric Fiselier L0 l2; 2985a83710eSEric Fiselier try 2995a83710eSEric Fiselier { 3005a83710eSEric Fiselier std::lock(l0, l1, l2); 3015a83710eSEric Fiselier assert(false); 3025a83710eSEric Fiselier } 3035a83710eSEric Fiselier catch (int) 3045a83710eSEric Fiselier { 3055a83710eSEric Fiselier assert(!l0.locked()); 3065a83710eSEric Fiselier assert(!l1.locked()); 3075a83710eSEric Fiselier assert(!l2.locked()); 3085a83710eSEric Fiselier } 3095a83710eSEric Fiselier } 3105a83710eSEric Fiselier { 3115a83710eSEric Fiselier L2 l0; 3125a83710eSEric Fiselier L0 l1; 3135a83710eSEric Fiselier L2 l2; 3145a83710eSEric Fiselier try 3155a83710eSEric Fiselier { 3165a83710eSEric Fiselier std::lock(l0, l1, l2); 3175a83710eSEric Fiselier assert(false); 3185a83710eSEric Fiselier } 3195a83710eSEric Fiselier catch (int) 3205a83710eSEric Fiselier { 3215a83710eSEric Fiselier assert(!l0.locked()); 3225a83710eSEric Fiselier assert(!l1.locked()); 3235a83710eSEric Fiselier assert(!l2.locked()); 3245a83710eSEric Fiselier } 3255a83710eSEric Fiselier } 3265a83710eSEric Fiselier { 3275a83710eSEric Fiselier L0 l0; 3285a83710eSEric Fiselier L2 l1; 3295a83710eSEric Fiselier L2 l2; 3305a83710eSEric Fiselier try 3315a83710eSEric Fiselier { 3325a83710eSEric Fiselier std::lock(l0, l1, l2); 3335a83710eSEric Fiselier assert(false); 3345a83710eSEric Fiselier } 3355a83710eSEric Fiselier catch (int) 3365a83710eSEric Fiselier { 3375a83710eSEric Fiselier assert(!l0.locked()); 3385a83710eSEric Fiselier assert(!l1.locked()); 3395a83710eSEric Fiselier assert(!l2.locked()); 3405a83710eSEric Fiselier } 3415a83710eSEric Fiselier } 3425a83710eSEric Fiselier { 3435a83710eSEric Fiselier L2 l0; 3445a83710eSEric Fiselier L2 l1; 3455a83710eSEric Fiselier L1 l2; 3465a83710eSEric Fiselier try 3475a83710eSEric Fiselier { 3485a83710eSEric Fiselier std::lock(l0, l1, l2); 3495a83710eSEric Fiselier assert(false); 3505a83710eSEric Fiselier } 3515a83710eSEric Fiselier catch (int) 3525a83710eSEric Fiselier { 3535a83710eSEric Fiselier assert(!l0.locked()); 3545a83710eSEric Fiselier assert(!l1.locked()); 3555a83710eSEric Fiselier assert(!l2.locked()); 3565a83710eSEric Fiselier } 3575a83710eSEric Fiselier } 3585a83710eSEric Fiselier { 3595a83710eSEric Fiselier L2 l0; 3605a83710eSEric Fiselier L1 l1; 3615a83710eSEric Fiselier L2 l2; 3625a83710eSEric Fiselier try 3635a83710eSEric Fiselier { 3645a83710eSEric Fiselier std::lock(l0, l1, l2); 3655a83710eSEric Fiselier assert(false); 3665a83710eSEric Fiselier } 3675a83710eSEric Fiselier catch (int) 3685a83710eSEric Fiselier { 3695a83710eSEric Fiselier assert(!l0.locked()); 3705a83710eSEric Fiselier assert(!l1.locked()); 3715a83710eSEric Fiselier assert(!l2.locked()); 3725a83710eSEric Fiselier } 3735a83710eSEric Fiselier } 3745a83710eSEric Fiselier { 3755a83710eSEric Fiselier L1 l0; 3765a83710eSEric Fiselier L2 l1; 3775a83710eSEric Fiselier L2 l2; 3785a83710eSEric Fiselier try 3795a83710eSEric Fiselier { 3805a83710eSEric Fiselier std::lock(l0, l1, l2); 3815a83710eSEric Fiselier assert(false); 3825a83710eSEric Fiselier } 3835a83710eSEric Fiselier catch (int) 3845a83710eSEric Fiselier { 3855a83710eSEric Fiselier assert(!l0.locked()); 3865a83710eSEric Fiselier assert(!l1.locked()); 3875a83710eSEric Fiselier assert(!l2.locked()); 3885a83710eSEric Fiselier } 3895a83710eSEric Fiselier } 39060d6ef63SRoger Ferrer Ibanez #endif // TEST_HAS_NO_EXCEPTIONS 3915a83710eSEric Fiselier { 3925a83710eSEric Fiselier L0 l0; 3935a83710eSEric Fiselier L0 l1; 3945a83710eSEric Fiselier L0 l2; 3955a83710eSEric Fiselier L0 l3; 3965a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 3975a83710eSEric Fiselier assert(l0.locked()); 3985a83710eSEric Fiselier assert(l1.locked()); 3995a83710eSEric Fiselier assert(l2.locked()); 4005a83710eSEric Fiselier assert(l3.locked()); 4015a83710eSEric Fiselier } 4025a83710eSEric Fiselier { 4035a83710eSEric Fiselier L0 l0; 4045a83710eSEric Fiselier L0 l1; 4055a83710eSEric Fiselier L0 l2; 4065a83710eSEric Fiselier L1 l3; 4075a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4085a83710eSEric Fiselier assert(l0.locked()); 4095a83710eSEric Fiselier assert(l1.locked()); 4105a83710eSEric Fiselier assert(l2.locked()); 4115a83710eSEric Fiselier assert(l3.locked()); 4125a83710eSEric Fiselier } 4135a83710eSEric Fiselier { 4145a83710eSEric Fiselier L0 l0; 4155a83710eSEric Fiselier L0 l1; 4165a83710eSEric Fiselier L1 l2; 4175a83710eSEric Fiselier L0 l3; 4185a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4195a83710eSEric Fiselier assert(l0.locked()); 4205a83710eSEric Fiselier assert(l1.locked()); 4215a83710eSEric Fiselier assert(l2.locked()); 4225a83710eSEric Fiselier assert(l3.locked()); 4235a83710eSEric Fiselier } 4245a83710eSEric Fiselier { 4255a83710eSEric Fiselier L0 l0; 4265a83710eSEric Fiselier L1 l1; 4275a83710eSEric Fiselier L0 l2; 4285a83710eSEric Fiselier L0 l3; 4295a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4305a83710eSEric Fiselier assert(l0.locked()); 4315a83710eSEric Fiselier assert(l1.locked()); 4325a83710eSEric Fiselier assert(l2.locked()); 4335a83710eSEric Fiselier assert(l3.locked()); 4345a83710eSEric Fiselier } 4355a83710eSEric Fiselier { 4365a83710eSEric Fiselier L1 l0; 4375a83710eSEric Fiselier L0 l1; 4385a83710eSEric Fiselier L0 l2; 4395a83710eSEric Fiselier L0 l3; 4405a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4415a83710eSEric Fiselier assert(l0.locked()); 4425a83710eSEric Fiselier assert(l1.locked()); 4435a83710eSEric Fiselier assert(l2.locked()); 4445a83710eSEric Fiselier assert(l3.locked()); 4455a83710eSEric Fiselier } 44660d6ef63SRoger Ferrer Ibanez #ifndef TEST_HAS_NO_EXCEPTIONS 4475a83710eSEric Fiselier { 4485a83710eSEric Fiselier L0 l0; 4495a83710eSEric Fiselier L0 l1; 4505a83710eSEric Fiselier L0 l2; 4515a83710eSEric Fiselier L2 l3; 4525a83710eSEric Fiselier try 4535a83710eSEric Fiselier { 4545a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4555a83710eSEric Fiselier assert(false); 4565a83710eSEric Fiselier } 4575a83710eSEric Fiselier catch (int) 4585a83710eSEric Fiselier { 4595a83710eSEric Fiselier assert(!l0.locked()); 4605a83710eSEric Fiselier assert(!l1.locked()); 4615a83710eSEric Fiselier assert(!l2.locked()); 4625a83710eSEric Fiselier assert(!l3.locked()); 4635a83710eSEric Fiselier } 4645a83710eSEric Fiselier } 4655a83710eSEric Fiselier { 4665a83710eSEric Fiselier L0 l0; 4675a83710eSEric Fiselier L0 l1; 4685a83710eSEric Fiselier L2 l2; 4695a83710eSEric Fiselier L0 l3; 4705a83710eSEric Fiselier try 4715a83710eSEric Fiselier { 4725a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4735a83710eSEric Fiselier assert(false); 4745a83710eSEric Fiselier } 4755a83710eSEric Fiselier catch (int) 4765a83710eSEric Fiselier { 4775a83710eSEric Fiselier assert(!l0.locked()); 4785a83710eSEric Fiselier assert(!l1.locked()); 4795a83710eSEric Fiselier assert(!l2.locked()); 4805a83710eSEric Fiselier assert(!l3.locked()); 4815a83710eSEric Fiselier } 4825a83710eSEric Fiselier } 4835a83710eSEric Fiselier { 4845a83710eSEric Fiselier L0 l0; 4855a83710eSEric Fiselier L2 l1; 4865a83710eSEric Fiselier L0 l2; 4875a83710eSEric Fiselier L0 l3; 4885a83710eSEric Fiselier try 4895a83710eSEric Fiselier { 4905a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4915a83710eSEric Fiselier assert(false); 4925a83710eSEric Fiselier } 4935a83710eSEric Fiselier catch (int) 4945a83710eSEric Fiselier { 4955a83710eSEric Fiselier assert(!l0.locked()); 4965a83710eSEric Fiselier assert(!l1.locked()); 4975a83710eSEric Fiselier assert(!l2.locked()); 4985a83710eSEric Fiselier assert(!l3.locked()); 4995a83710eSEric Fiselier } 5005a83710eSEric Fiselier } 5015a83710eSEric Fiselier { 5025a83710eSEric Fiselier L2 l0; 5035a83710eSEric Fiselier L0 l1; 5045a83710eSEric Fiselier L0 l2; 5055a83710eSEric Fiselier L0 l3; 5065a83710eSEric Fiselier try 5075a83710eSEric Fiselier { 5085a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 5095a83710eSEric Fiselier assert(false); 5105a83710eSEric Fiselier } 5115a83710eSEric Fiselier catch (int) 5125a83710eSEric Fiselier { 5135a83710eSEric Fiselier assert(!l0.locked()); 5145a83710eSEric Fiselier assert(!l1.locked()); 5155a83710eSEric Fiselier assert(!l2.locked()); 5165a83710eSEric Fiselier assert(!l3.locked()); 5175a83710eSEric Fiselier } 5185a83710eSEric Fiselier } 51960d6ef63SRoger Ferrer Ibanez #endif // TEST_HAS_NO_EXCEPTIONS 520e11fb13bSEric Fiselier #endif // TEST_STD_VER >= 11 521*2df59c50SJF Bastien 522*2df59c50SJF Bastien return 0; 5235a83710eSEric Fiselier } 524