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