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 // 10f520c144SAsiri Rathnayake // XFAIL: libcpp-no-exceptions 115a83710eSEric Fiselier // UNSUPPORTED: libcpp-has-no-threads 125a83710eSEric Fiselier 13*76e316f9SEric Fiselier // This test hangs forever when built against libstdc++. In order to allow 14*76e316f9SEric Fiselier // validation of the test suite against other STLs we have to mark it 15*76e316f9SEric Fiselier // unsupported. 16*76e316f9SEric Fiselier // UNSUPPORTED: libstdc++ 17*76e316f9SEric Fiselier 185a83710eSEric Fiselier // <mutex> 195a83710eSEric Fiselier 205a83710eSEric Fiselier // template <class L1, class L2, class... L3> 215a83710eSEric Fiselier // void lock(L1&, L2&, L3&...); 225a83710eSEric Fiselier 235a83710eSEric Fiselier #include <mutex> 245a83710eSEric Fiselier #include <cassert> 255a83710eSEric Fiselier 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 { 815a83710eSEric Fiselier throw 1; 825a83710eSEric Fiselier } 835a83710eSEric Fiselier 845a83710eSEric Fiselier bool try_lock() 855a83710eSEric Fiselier { 865a83710eSEric Fiselier 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 955a83710eSEric Fiselier int main() 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 } 1185a83710eSEric Fiselier { 1195a83710eSEric Fiselier L0 l0; 1205a83710eSEric Fiselier L2 l1; 1215a83710eSEric Fiselier try 1225a83710eSEric Fiselier { 1235a83710eSEric Fiselier std::lock(l0, l1); 1245a83710eSEric Fiselier assert(false); 1255a83710eSEric Fiselier } 1265a83710eSEric Fiselier catch (int) 1275a83710eSEric Fiselier { 1285a83710eSEric Fiselier assert(!l0.locked()); 1295a83710eSEric Fiselier assert(!l1.locked()); 1305a83710eSEric Fiselier } 1315a83710eSEric Fiselier } 1325a83710eSEric Fiselier { 1335a83710eSEric Fiselier L2 l0; 1345a83710eSEric Fiselier L0 l1; 1355a83710eSEric Fiselier try 1365a83710eSEric Fiselier { 1375a83710eSEric Fiselier std::lock(l0, l1); 1385a83710eSEric Fiselier assert(false); 1395a83710eSEric Fiselier } 1405a83710eSEric Fiselier catch (int) 1415a83710eSEric Fiselier { 1425a83710eSEric Fiselier assert(!l0.locked()); 1435a83710eSEric Fiselier assert(!l1.locked()); 1445a83710eSEric Fiselier } 1455a83710eSEric Fiselier } 1465a83710eSEric Fiselier { 1475a83710eSEric Fiselier L1 l0; 1485a83710eSEric Fiselier L2 l1; 1495a83710eSEric Fiselier try 1505a83710eSEric Fiselier { 1515a83710eSEric Fiselier std::lock(l0, l1); 1525a83710eSEric Fiselier assert(false); 1535a83710eSEric Fiselier } 1545a83710eSEric Fiselier catch (int) 1555a83710eSEric Fiselier { 1565a83710eSEric Fiselier assert(!l0.locked()); 1575a83710eSEric Fiselier assert(!l1.locked()); 1585a83710eSEric Fiselier } 1595a83710eSEric Fiselier } 1605a83710eSEric Fiselier { 1615a83710eSEric Fiselier L2 l0; 1625a83710eSEric Fiselier L1 l1; 1635a83710eSEric Fiselier try 1645a83710eSEric Fiselier { 1655a83710eSEric Fiselier std::lock(l0, l1); 1665a83710eSEric Fiselier assert(false); 1675a83710eSEric Fiselier } 1685a83710eSEric Fiselier catch (int) 1695a83710eSEric Fiselier { 1705a83710eSEric Fiselier assert(!l0.locked()); 1715a83710eSEric Fiselier assert(!l1.locked()); 1725a83710eSEric Fiselier } 1735a83710eSEric Fiselier } 1745a83710eSEric Fiselier { 1755a83710eSEric Fiselier L2 l0; 1765a83710eSEric Fiselier L2 l1; 1775a83710eSEric Fiselier try 1785a83710eSEric Fiselier { 1795a83710eSEric Fiselier std::lock(l0, l1); 1805a83710eSEric Fiselier assert(false); 1815a83710eSEric Fiselier } 1825a83710eSEric Fiselier catch (int) 1835a83710eSEric Fiselier { 1845a83710eSEric Fiselier assert(!l0.locked()); 1855a83710eSEric Fiselier assert(!l1.locked()); 1865a83710eSEric Fiselier } 1875a83710eSEric Fiselier } 1885a83710eSEric Fiselier #ifndef _LIBCPP_HAS_NO_VARIADICS 1895a83710eSEric Fiselier { 1905a83710eSEric Fiselier L0 l0; 1915a83710eSEric Fiselier L0 l1; 1925a83710eSEric Fiselier L0 l2; 1935a83710eSEric Fiselier std::lock(l0, l1, l2); 1945a83710eSEric Fiselier assert(l0.locked()); 1955a83710eSEric Fiselier assert(l1.locked()); 1965a83710eSEric Fiselier assert(l2.locked()); 1975a83710eSEric Fiselier } 1985a83710eSEric Fiselier { 1995a83710eSEric Fiselier L2 l0; 2005a83710eSEric Fiselier L2 l1; 2015a83710eSEric Fiselier L2 l2; 2025a83710eSEric Fiselier try 2035a83710eSEric Fiselier { 2045a83710eSEric Fiselier std::lock(l0, l1, l2); 2055a83710eSEric Fiselier assert(false); 2065a83710eSEric Fiselier } 2075a83710eSEric Fiselier catch (int) 2085a83710eSEric Fiselier { 2095a83710eSEric Fiselier assert(!l0.locked()); 2105a83710eSEric Fiselier assert(!l1.locked()); 2115a83710eSEric Fiselier assert(!l2.locked()); 2125a83710eSEric Fiselier } 2135a83710eSEric Fiselier } 2145a83710eSEric Fiselier { 2155a83710eSEric Fiselier L0 l0; 2165a83710eSEric Fiselier L0 l1; 2175a83710eSEric Fiselier L1 l2; 2185a83710eSEric Fiselier std::lock(l0, l1, l2); 2195a83710eSEric Fiselier assert(l0.locked()); 2205a83710eSEric Fiselier assert(l1.locked()); 2215a83710eSEric Fiselier assert(l2.locked()); 2225a83710eSEric Fiselier } 2235a83710eSEric Fiselier { 2245a83710eSEric Fiselier L0 l0; 2255a83710eSEric Fiselier L1 l1; 2265a83710eSEric Fiselier L0 l2; 2275a83710eSEric Fiselier std::lock(l0, l1, l2); 2285a83710eSEric Fiselier assert(l0.locked()); 2295a83710eSEric Fiselier assert(l1.locked()); 2305a83710eSEric Fiselier assert(l2.locked()); 2315a83710eSEric Fiselier } 2325a83710eSEric Fiselier { 2335a83710eSEric Fiselier L1 l0; 2345a83710eSEric Fiselier L0 l1; 2355a83710eSEric Fiselier L0 l2; 2365a83710eSEric Fiselier std::lock(l0, l1, l2); 2375a83710eSEric Fiselier assert(l0.locked()); 2385a83710eSEric Fiselier assert(l1.locked()); 2395a83710eSEric Fiselier assert(l2.locked()); 2405a83710eSEric Fiselier } 2415a83710eSEric Fiselier { 2425a83710eSEric Fiselier L0 l0; 2435a83710eSEric Fiselier L0 l1; 2445a83710eSEric Fiselier L2 l2; 2455a83710eSEric Fiselier try 2465a83710eSEric Fiselier { 2475a83710eSEric Fiselier std::lock(l0, l1, l2); 2485a83710eSEric Fiselier assert(false); 2495a83710eSEric Fiselier } 2505a83710eSEric Fiselier catch (int) 2515a83710eSEric Fiselier { 2525a83710eSEric Fiselier assert(!l0.locked()); 2535a83710eSEric Fiselier assert(!l1.locked()); 2545a83710eSEric Fiselier assert(!l2.locked()); 2555a83710eSEric Fiselier } 2565a83710eSEric Fiselier } 2575a83710eSEric Fiselier { 2585a83710eSEric Fiselier L0 l0; 2595a83710eSEric Fiselier L2 l1; 2605a83710eSEric Fiselier L0 l2; 2615a83710eSEric Fiselier try 2625a83710eSEric Fiselier { 2635a83710eSEric Fiselier std::lock(l0, l1, l2); 2645a83710eSEric Fiselier assert(false); 2655a83710eSEric Fiselier } 2665a83710eSEric Fiselier catch (int) 2675a83710eSEric Fiselier { 2685a83710eSEric Fiselier assert(!l0.locked()); 2695a83710eSEric Fiselier assert(!l1.locked()); 2705a83710eSEric Fiselier assert(!l2.locked()); 2715a83710eSEric Fiselier } 2725a83710eSEric Fiselier } 2735a83710eSEric Fiselier { 2745a83710eSEric Fiselier L2 l0; 2755a83710eSEric Fiselier L0 l1; 2765a83710eSEric Fiselier L0 l2; 2775a83710eSEric Fiselier try 2785a83710eSEric Fiselier { 2795a83710eSEric Fiselier std::lock(l0, l1, l2); 2805a83710eSEric Fiselier assert(false); 2815a83710eSEric Fiselier } 2825a83710eSEric Fiselier catch (int) 2835a83710eSEric Fiselier { 2845a83710eSEric Fiselier assert(!l0.locked()); 2855a83710eSEric Fiselier assert(!l1.locked()); 2865a83710eSEric Fiselier assert(!l2.locked()); 2875a83710eSEric Fiselier } 2885a83710eSEric Fiselier } 2895a83710eSEric Fiselier { 2905a83710eSEric Fiselier L2 l0; 2915a83710eSEric Fiselier L2 l1; 2925a83710eSEric Fiselier L0 l2; 2935a83710eSEric Fiselier try 2945a83710eSEric Fiselier { 2955a83710eSEric Fiselier std::lock(l0, l1, l2); 2965a83710eSEric Fiselier assert(false); 2975a83710eSEric Fiselier } 2985a83710eSEric Fiselier catch (int) 2995a83710eSEric Fiselier { 3005a83710eSEric Fiselier assert(!l0.locked()); 3015a83710eSEric Fiselier assert(!l1.locked()); 3025a83710eSEric Fiselier assert(!l2.locked()); 3035a83710eSEric Fiselier } 3045a83710eSEric Fiselier } 3055a83710eSEric Fiselier { 3065a83710eSEric Fiselier L2 l0; 3075a83710eSEric Fiselier L0 l1; 3085a83710eSEric Fiselier L2 l2; 3095a83710eSEric Fiselier try 3105a83710eSEric Fiselier { 3115a83710eSEric Fiselier std::lock(l0, l1, l2); 3125a83710eSEric Fiselier assert(false); 3135a83710eSEric Fiselier } 3145a83710eSEric Fiselier catch (int) 3155a83710eSEric Fiselier { 3165a83710eSEric Fiselier assert(!l0.locked()); 3175a83710eSEric Fiselier assert(!l1.locked()); 3185a83710eSEric Fiselier assert(!l2.locked()); 3195a83710eSEric Fiselier } 3205a83710eSEric Fiselier } 3215a83710eSEric Fiselier { 3225a83710eSEric Fiselier L0 l0; 3235a83710eSEric Fiselier L2 l1; 3245a83710eSEric Fiselier L2 l2; 3255a83710eSEric Fiselier try 3265a83710eSEric Fiselier { 3275a83710eSEric Fiselier std::lock(l0, l1, l2); 3285a83710eSEric Fiselier assert(false); 3295a83710eSEric Fiselier } 3305a83710eSEric Fiselier catch (int) 3315a83710eSEric Fiselier { 3325a83710eSEric Fiselier assert(!l0.locked()); 3335a83710eSEric Fiselier assert(!l1.locked()); 3345a83710eSEric Fiselier assert(!l2.locked()); 3355a83710eSEric Fiselier } 3365a83710eSEric Fiselier } 3375a83710eSEric Fiselier { 3385a83710eSEric Fiselier L2 l0; 3395a83710eSEric Fiselier L2 l1; 3405a83710eSEric Fiselier L1 l2; 3415a83710eSEric Fiselier try 3425a83710eSEric Fiselier { 3435a83710eSEric Fiselier std::lock(l0, l1, l2); 3445a83710eSEric Fiselier assert(false); 3455a83710eSEric Fiselier } 3465a83710eSEric Fiselier catch (int) 3475a83710eSEric Fiselier { 3485a83710eSEric Fiselier assert(!l0.locked()); 3495a83710eSEric Fiselier assert(!l1.locked()); 3505a83710eSEric Fiselier assert(!l2.locked()); 3515a83710eSEric Fiselier } 3525a83710eSEric Fiselier } 3535a83710eSEric Fiselier { 3545a83710eSEric Fiselier L2 l0; 3555a83710eSEric Fiselier L1 l1; 3565a83710eSEric Fiselier L2 l2; 3575a83710eSEric Fiselier try 3585a83710eSEric Fiselier { 3595a83710eSEric Fiselier std::lock(l0, l1, l2); 3605a83710eSEric Fiselier assert(false); 3615a83710eSEric Fiselier } 3625a83710eSEric Fiselier catch (int) 3635a83710eSEric Fiselier { 3645a83710eSEric Fiselier assert(!l0.locked()); 3655a83710eSEric Fiselier assert(!l1.locked()); 3665a83710eSEric Fiselier assert(!l2.locked()); 3675a83710eSEric Fiselier } 3685a83710eSEric Fiselier } 3695a83710eSEric Fiselier { 3705a83710eSEric Fiselier L1 l0; 3715a83710eSEric Fiselier L2 l1; 3725a83710eSEric Fiselier L2 l2; 3735a83710eSEric Fiselier try 3745a83710eSEric Fiselier { 3755a83710eSEric Fiselier std::lock(l0, l1, l2); 3765a83710eSEric Fiselier assert(false); 3775a83710eSEric Fiselier } 3785a83710eSEric Fiselier catch (int) 3795a83710eSEric Fiselier { 3805a83710eSEric Fiselier assert(!l0.locked()); 3815a83710eSEric Fiselier assert(!l1.locked()); 3825a83710eSEric Fiselier assert(!l2.locked()); 3835a83710eSEric Fiselier } 3845a83710eSEric Fiselier } 3855a83710eSEric Fiselier { 3865a83710eSEric Fiselier L0 l0; 3875a83710eSEric Fiselier L0 l1; 3885a83710eSEric Fiselier L0 l2; 3895a83710eSEric Fiselier L0 l3; 3905a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 3915a83710eSEric Fiselier assert(l0.locked()); 3925a83710eSEric Fiselier assert(l1.locked()); 3935a83710eSEric Fiselier assert(l2.locked()); 3945a83710eSEric Fiselier assert(l3.locked()); 3955a83710eSEric Fiselier } 3965a83710eSEric Fiselier { 3975a83710eSEric Fiselier L0 l0; 3985a83710eSEric Fiselier L0 l1; 3995a83710eSEric Fiselier L0 l2; 4005a83710eSEric Fiselier L1 l3; 4015a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4025a83710eSEric Fiselier assert(l0.locked()); 4035a83710eSEric Fiselier assert(l1.locked()); 4045a83710eSEric Fiselier assert(l2.locked()); 4055a83710eSEric Fiselier assert(l3.locked()); 4065a83710eSEric Fiselier } 4075a83710eSEric Fiselier { 4085a83710eSEric Fiselier L0 l0; 4095a83710eSEric Fiselier L0 l1; 4105a83710eSEric Fiselier L1 l2; 4115a83710eSEric Fiselier L0 l3; 4125a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4135a83710eSEric Fiselier assert(l0.locked()); 4145a83710eSEric Fiselier assert(l1.locked()); 4155a83710eSEric Fiselier assert(l2.locked()); 4165a83710eSEric Fiselier assert(l3.locked()); 4175a83710eSEric Fiselier } 4185a83710eSEric Fiselier { 4195a83710eSEric Fiselier L0 l0; 4205a83710eSEric Fiselier L1 l1; 4215a83710eSEric Fiselier L0 l2; 4225a83710eSEric Fiselier L0 l3; 4235a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4245a83710eSEric Fiselier assert(l0.locked()); 4255a83710eSEric Fiselier assert(l1.locked()); 4265a83710eSEric Fiselier assert(l2.locked()); 4275a83710eSEric Fiselier assert(l3.locked()); 4285a83710eSEric Fiselier } 4295a83710eSEric Fiselier { 4305a83710eSEric Fiselier L1 l0; 4315a83710eSEric Fiselier L0 l1; 4325a83710eSEric Fiselier L0 l2; 4335a83710eSEric Fiselier L0 l3; 4345a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4355a83710eSEric Fiselier assert(l0.locked()); 4365a83710eSEric Fiselier assert(l1.locked()); 4375a83710eSEric Fiselier assert(l2.locked()); 4385a83710eSEric Fiselier assert(l3.locked()); 4395a83710eSEric Fiselier } 4405a83710eSEric Fiselier { 4415a83710eSEric Fiselier L0 l0; 4425a83710eSEric Fiselier L0 l1; 4435a83710eSEric Fiselier L0 l2; 4445a83710eSEric Fiselier L2 l3; 4455a83710eSEric Fiselier try 4465a83710eSEric Fiselier { 4475a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4485a83710eSEric Fiselier assert(false); 4495a83710eSEric Fiselier } 4505a83710eSEric Fiselier catch (int) 4515a83710eSEric Fiselier { 4525a83710eSEric Fiselier assert(!l0.locked()); 4535a83710eSEric Fiselier assert(!l1.locked()); 4545a83710eSEric Fiselier assert(!l2.locked()); 4555a83710eSEric Fiselier assert(!l3.locked()); 4565a83710eSEric Fiselier } 4575a83710eSEric Fiselier } 4585a83710eSEric Fiselier { 4595a83710eSEric Fiselier L0 l0; 4605a83710eSEric Fiselier L0 l1; 4615a83710eSEric Fiselier L2 l2; 4625a83710eSEric Fiselier L0 l3; 4635a83710eSEric Fiselier try 4645a83710eSEric Fiselier { 4655a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4665a83710eSEric Fiselier assert(false); 4675a83710eSEric Fiselier } 4685a83710eSEric Fiselier catch (int) 4695a83710eSEric Fiselier { 4705a83710eSEric Fiselier assert(!l0.locked()); 4715a83710eSEric Fiselier assert(!l1.locked()); 4725a83710eSEric Fiselier assert(!l2.locked()); 4735a83710eSEric Fiselier assert(!l3.locked()); 4745a83710eSEric Fiselier } 4755a83710eSEric Fiselier } 4765a83710eSEric Fiselier { 4775a83710eSEric Fiselier L0 l0; 4785a83710eSEric Fiselier L2 l1; 4795a83710eSEric Fiselier L0 l2; 4805a83710eSEric Fiselier L0 l3; 4815a83710eSEric Fiselier try 4825a83710eSEric Fiselier { 4835a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4845a83710eSEric Fiselier assert(false); 4855a83710eSEric Fiselier } 4865a83710eSEric Fiselier catch (int) 4875a83710eSEric Fiselier { 4885a83710eSEric Fiselier assert(!l0.locked()); 4895a83710eSEric Fiselier assert(!l1.locked()); 4905a83710eSEric Fiselier assert(!l2.locked()); 4915a83710eSEric Fiselier assert(!l3.locked()); 4925a83710eSEric Fiselier } 4935a83710eSEric Fiselier } 4945a83710eSEric Fiselier { 4955a83710eSEric Fiselier L2 l0; 4965a83710eSEric Fiselier L0 l1; 4975a83710eSEric Fiselier L0 l2; 4985a83710eSEric Fiselier L0 l3; 4995a83710eSEric Fiselier try 5005a83710eSEric Fiselier { 5015a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 5025a83710eSEric Fiselier assert(false); 5035a83710eSEric Fiselier } 5045a83710eSEric Fiselier catch (int) 5055a83710eSEric Fiselier { 5065a83710eSEric Fiselier assert(!l0.locked()); 5075a83710eSEric Fiselier assert(!l1.locked()); 5085a83710eSEric Fiselier assert(!l2.locked()); 5095a83710eSEric Fiselier assert(!l3.locked()); 5105a83710eSEric Fiselier } 5115a83710eSEric Fiselier } 5125a83710eSEric Fiselier #endif // _LIBCPP_HAS_NO_VARIADICS 5135a83710eSEric Fiselier } 514