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 // 10*f520c144SAsiri Rathnayake // XFAIL: libcpp-no-exceptions 115a83710eSEric Fiselier // UNSUPPORTED: libcpp-has-no-threads 125a83710eSEric Fiselier 135a83710eSEric Fiselier // <mutex> 145a83710eSEric Fiselier 155a83710eSEric Fiselier // template <class L1, class L2, class... L3> 165a83710eSEric Fiselier // void lock(L1&, L2&, L3&...); 175a83710eSEric Fiselier 185a83710eSEric Fiselier #include <mutex> 195a83710eSEric Fiselier #include <cassert> 205a83710eSEric Fiselier 215a83710eSEric Fiselier class L0 225a83710eSEric Fiselier { 235a83710eSEric Fiselier bool locked_; 245a83710eSEric Fiselier 255a83710eSEric Fiselier public: 265a83710eSEric Fiselier L0() : locked_(false) {} 275a83710eSEric Fiselier 285a83710eSEric Fiselier void lock() 295a83710eSEric Fiselier { 305a83710eSEric Fiselier locked_ = true; 315a83710eSEric Fiselier } 325a83710eSEric Fiselier 335a83710eSEric Fiselier bool try_lock() 345a83710eSEric Fiselier { 355a83710eSEric Fiselier locked_ = true; 365a83710eSEric Fiselier return locked_; 375a83710eSEric Fiselier } 385a83710eSEric Fiselier 395a83710eSEric Fiselier void unlock() {locked_ = false;} 405a83710eSEric Fiselier 415a83710eSEric Fiselier bool locked() const {return locked_;} 425a83710eSEric Fiselier }; 435a83710eSEric Fiselier 445a83710eSEric Fiselier class L1 455a83710eSEric Fiselier { 465a83710eSEric Fiselier bool locked_; 475a83710eSEric Fiselier 485a83710eSEric Fiselier public: 495a83710eSEric Fiselier L1() : locked_(false) {} 505a83710eSEric Fiselier 515a83710eSEric Fiselier void lock() 525a83710eSEric Fiselier { 535a83710eSEric Fiselier locked_ = true; 545a83710eSEric Fiselier } 555a83710eSEric Fiselier 565a83710eSEric Fiselier bool try_lock() 575a83710eSEric Fiselier { 585a83710eSEric Fiselier locked_ = false; 595a83710eSEric Fiselier return locked_; 605a83710eSEric Fiselier } 615a83710eSEric Fiselier 625a83710eSEric Fiselier void unlock() {locked_ = false;} 635a83710eSEric Fiselier 645a83710eSEric Fiselier bool locked() const {return locked_;} 655a83710eSEric Fiselier }; 665a83710eSEric Fiselier 675a83710eSEric Fiselier class L2 685a83710eSEric Fiselier { 695a83710eSEric Fiselier bool locked_; 705a83710eSEric Fiselier 715a83710eSEric Fiselier public: 725a83710eSEric Fiselier L2() : locked_(false) {} 735a83710eSEric Fiselier 745a83710eSEric Fiselier void lock() 755a83710eSEric Fiselier { 765a83710eSEric Fiselier throw 1; 775a83710eSEric Fiselier } 785a83710eSEric Fiselier 795a83710eSEric Fiselier bool try_lock() 805a83710eSEric Fiselier { 815a83710eSEric Fiselier throw 1; 825a83710eSEric Fiselier return locked_; 835a83710eSEric Fiselier } 845a83710eSEric Fiselier 855a83710eSEric Fiselier void unlock() {locked_ = false;} 865a83710eSEric Fiselier 875a83710eSEric Fiselier bool locked() const {return locked_;} 885a83710eSEric Fiselier }; 895a83710eSEric Fiselier 905a83710eSEric Fiselier int main() 915a83710eSEric Fiselier { 925a83710eSEric Fiselier { 935a83710eSEric Fiselier L0 l0; 945a83710eSEric Fiselier L0 l1; 955a83710eSEric Fiselier std::lock(l0, l1); 965a83710eSEric Fiselier assert(l0.locked()); 975a83710eSEric Fiselier assert(l1.locked()); 985a83710eSEric Fiselier } 995a83710eSEric Fiselier { 1005a83710eSEric Fiselier L0 l0; 1015a83710eSEric Fiselier L1 l1; 1025a83710eSEric Fiselier std::lock(l0, l1); 1035a83710eSEric Fiselier assert(l0.locked()); 1045a83710eSEric Fiselier assert(l1.locked()); 1055a83710eSEric Fiselier } 1065a83710eSEric Fiselier { 1075a83710eSEric Fiselier L1 l0; 1085a83710eSEric Fiselier L0 l1; 1095a83710eSEric Fiselier std::lock(l0, l1); 1105a83710eSEric Fiselier assert(l0.locked()); 1115a83710eSEric Fiselier assert(l1.locked()); 1125a83710eSEric Fiselier } 1135a83710eSEric Fiselier { 1145a83710eSEric Fiselier L0 l0; 1155a83710eSEric Fiselier L2 l1; 1165a83710eSEric Fiselier try 1175a83710eSEric Fiselier { 1185a83710eSEric Fiselier std::lock(l0, l1); 1195a83710eSEric Fiselier assert(false); 1205a83710eSEric Fiselier } 1215a83710eSEric Fiselier catch (int) 1225a83710eSEric Fiselier { 1235a83710eSEric Fiselier assert(!l0.locked()); 1245a83710eSEric Fiselier assert(!l1.locked()); 1255a83710eSEric Fiselier } 1265a83710eSEric Fiselier } 1275a83710eSEric Fiselier { 1285a83710eSEric Fiselier L2 l0; 1295a83710eSEric Fiselier L0 l1; 1305a83710eSEric Fiselier try 1315a83710eSEric Fiselier { 1325a83710eSEric Fiselier std::lock(l0, l1); 1335a83710eSEric Fiselier assert(false); 1345a83710eSEric Fiselier } 1355a83710eSEric Fiselier catch (int) 1365a83710eSEric Fiselier { 1375a83710eSEric Fiselier assert(!l0.locked()); 1385a83710eSEric Fiselier assert(!l1.locked()); 1395a83710eSEric Fiselier } 1405a83710eSEric Fiselier } 1415a83710eSEric Fiselier { 1425a83710eSEric Fiselier L1 l0; 1435a83710eSEric Fiselier L2 l1; 1445a83710eSEric Fiselier try 1455a83710eSEric Fiselier { 1465a83710eSEric Fiselier std::lock(l0, l1); 1475a83710eSEric Fiselier assert(false); 1485a83710eSEric Fiselier } 1495a83710eSEric Fiselier catch (int) 1505a83710eSEric Fiselier { 1515a83710eSEric Fiselier assert(!l0.locked()); 1525a83710eSEric Fiselier assert(!l1.locked()); 1535a83710eSEric Fiselier } 1545a83710eSEric Fiselier } 1555a83710eSEric Fiselier { 1565a83710eSEric Fiselier L2 l0; 1575a83710eSEric Fiselier L1 l1; 1585a83710eSEric Fiselier try 1595a83710eSEric Fiselier { 1605a83710eSEric Fiselier std::lock(l0, l1); 1615a83710eSEric Fiselier assert(false); 1625a83710eSEric Fiselier } 1635a83710eSEric Fiselier catch (int) 1645a83710eSEric Fiselier { 1655a83710eSEric Fiselier assert(!l0.locked()); 1665a83710eSEric Fiselier assert(!l1.locked()); 1675a83710eSEric Fiselier } 1685a83710eSEric Fiselier } 1695a83710eSEric Fiselier { 1705a83710eSEric Fiselier L2 l0; 1715a83710eSEric Fiselier L2 l1; 1725a83710eSEric Fiselier try 1735a83710eSEric Fiselier { 1745a83710eSEric Fiselier std::lock(l0, l1); 1755a83710eSEric Fiselier assert(false); 1765a83710eSEric Fiselier } 1775a83710eSEric Fiselier catch (int) 1785a83710eSEric Fiselier { 1795a83710eSEric Fiselier assert(!l0.locked()); 1805a83710eSEric Fiselier assert(!l1.locked()); 1815a83710eSEric Fiselier } 1825a83710eSEric Fiselier } 1835a83710eSEric Fiselier #ifndef _LIBCPP_HAS_NO_VARIADICS 1845a83710eSEric Fiselier { 1855a83710eSEric Fiselier L0 l0; 1865a83710eSEric Fiselier L0 l1; 1875a83710eSEric Fiselier L0 l2; 1885a83710eSEric Fiselier std::lock(l0, l1, l2); 1895a83710eSEric Fiselier assert(l0.locked()); 1905a83710eSEric Fiselier assert(l1.locked()); 1915a83710eSEric Fiselier assert(l2.locked()); 1925a83710eSEric Fiselier } 1935a83710eSEric Fiselier { 1945a83710eSEric Fiselier L2 l0; 1955a83710eSEric Fiselier L2 l1; 1965a83710eSEric Fiselier L2 l2; 1975a83710eSEric Fiselier try 1985a83710eSEric Fiselier { 1995a83710eSEric Fiselier std::lock(l0, l1, l2); 2005a83710eSEric Fiselier assert(false); 2015a83710eSEric Fiselier } 2025a83710eSEric Fiselier catch (int) 2035a83710eSEric Fiselier { 2045a83710eSEric Fiselier assert(!l0.locked()); 2055a83710eSEric Fiselier assert(!l1.locked()); 2065a83710eSEric Fiselier assert(!l2.locked()); 2075a83710eSEric Fiselier } 2085a83710eSEric Fiselier } 2095a83710eSEric Fiselier { 2105a83710eSEric Fiselier L0 l0; 2115a83710eSEric Fiselier L0 l1; 2125a83710eSEric Fiselier L1 l2; 2135a83710eSEric Fiselier std::lock(l0, l1, l2); 2145a83710eSEric Fiselier assert(l0.locked()); 2155a83710eSEric Fiselier assert(l1.locked()); 2165a83710eSEric Fiselier assert(l2.locked()); 2175a83710eSEric Fiselier } 2185a83710eSEric Fiselier { 2195a83710eSEric Fiselier L0 l0; 2205a83710eSEric Fiselier L1 l1; 2215a83710eSEric Fiselier L0 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 L1 l0; 2295a83710eSEric Fiselier L0 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 L0 l0; 2385a83710eSEric Fiselier L0 l1; 2395a83710eSEric Fiselier L2 l2; 2405a83710eSEric Fiselier try 2415a83710eSEric Fiselier { 2425a83710eSEric Fiselier std::lock(l0, l1, l2); 2435a83710eSEric Fiselier assert(false); 2445a83710eSEric Fiselier } 2455a83710eSEric Fiselier catch (int) 2465a83710eSEric Fiselier { 2475a83710eSEric Fiselier assert(!l0.locked()); 2485a83710eSEric Fiselier assert(!l1.locked()); 2495a83710eSEric Fiselier assert(!l2.locked()); 2505a83710eSEric Fiselier } 2515a83710eSEric Fiselier } 2525a83710eSEric Fiselier { 2535a83710eSEric Fiselier L0 l0; 2545a83710eSEric Fiselier L2 l1; 2555a83710eSEric Fiselier L0 l2; 2565a83710eSEric Fiselier try 2575a83710eSEric Fiselier { 2585a83710eSEric Fiselier std::lock(l0, l1, l2); 2595a83710eSEric Fiselier assert(false); 2605a83710eSEric Fiselier } 2615a83710eSEric Fiselier catch (int) 2625a83710eSEric Fiselier { 2635a83710eSEric Fiselier assert(!l0.locked()); 2645a83710eSEric Fiselier assert(!l1.locked()); 2655a83710eSEric Fiselier assert(!l2.locked()); 2665a83710eSEric Fiselier } 2675a83710eSEric Fiselier } 2685a83710eSEric Fiselier { 2695a83710eSEric Fiselier L2 l0; 2705a83710eSEric Fiselier L0 l1; 2715a83710eSEric Fiselier L0 l2; 2725a83710eSEric Fiselier try 2735a83710eSEric Fiselier { 2745a83710eSEric Fiselier std::lock(l0, l1, l2); 2755a83710eSEric Fiselier assert(false); 2765a83710eSEric Fiselier } 2775a83710eSEric Fiselier catch (int) 2785a83710eSEric Fiselier { 2795a83710eSEric Fiselier assert(!l0.locked()); 2805a83710eSEric Fiselier assert(!l1.locked()); 2815a83710eSEric Fiselier assert(!l2.locked()); 2825a83710eSEric Fiselier } 2835a83710eSEric Fiselier } 2845a83710eSEric Fiselier { 2855a83710eSEric Fiselier L2 l0; 2865a83710eSEric Fiselier L2 l1; 2875a83710eSEric Fiselier L0 l2; 2885a83710eSEric Fiselier try 2895a83710eSEric Fiselier { 2905a83710eSEric Fiselier std::lock(l0, l1, l2); 2915a83710eSEric Fiselier assert(false); 2925a83710eSEric Fiselier } 2935a83710eSEric Fiselier catch (int) 2945a83710eSEric Fiselier { 2955a83710eSEric Fiselier assert(!l0.locked()); 2965a83710eSEric Fiselier assert(!l1.locked()); 2975a83710eSEric Fiselier assert(!l2.locked()); 2985a83710eSEric Fiselier } 2995a83710eSEric Fiselier } 3005a83710eSEric Fiselier { 3015a83710eSEric Fiselier L2 l0; 3025a83710eSEric Fiselier L0 l1; 3035a83710eSEric Fiselier L2 l2; 3045a83710eSEric Fiselier try 3055a83710eSEric Fiselier { 3065a83710eSEric Fiselier std::lock(l0, l1, l2); 3075a83710eSEric Fiselier assert(false); 3085a83710eSEric Fiselier } 3095a83710eSEric Fiselier catch (int) 3105a83710eSEric Fiselier { 3115a83710eSEric Fiselier assert(!l0.locked()); 3125a83710eSEric Fiselier assert(!l1.locked()); 3135a83710eSEric Fiselier assert(!l2.locked()); 3145a83710eSEric Fiselier } 3155a83710eSEric Fiselier } 3165a83710eSEric Fiselier { 3175a83710eSEric Fiselier L0 l0; 3185a83710eSEric Fiselier L2 l1; 3195a83710eSEric Fiselier L2 l2; 3205a83710eSEric Fiselier try 3215a83710eSEric Fiselier { 3225a83710eSEric Fiselier std::lock(l0, l1, l2); 3235a83710eSEric Fiselier assert(false); 3245a83710eSEric Fiselier } 3255a83710eSEric Fiselier catch (int) 3265a83710eSEric Fiselier { 3275a83710eSEric Fiselier assert(!l0.locked()); 3285a83710eSEric Fiselier assert(!l1.locked()); 3295a83710eSEric Fiselier assert(!l2.locked()); 3305a83710eSEric Fiselier } 3315a83710eSEric Fiselier } 3325a83710eSEric Fiselier { 3335a83710eSEric Fiselier L2 l0; 3345a83710eSEric Fiselier L2 l1; 3355a83710eSEric Fiselier L1 l2; 3365a83710eSEric Fiselier try 3375a83710eSEric Fiselier { 3385a83710eSEric Fiselier std::lock(l0, l1, l2); 3395a83710eSEric Fiselier assert(false); 3405a83710eSEric Fiselier } 3415a83710eSEric Fiselier catch (int) 3425a83710eSEric Fiselier { 3435a83710eSEric Fiselier assert(!l0.locked()); 3445a83710eSEric Fiselier assert(!l1.locked()); 3455a83710eSEric Fiselier assert(!l2.locked()); 3465a83710eSEric Fiselier } 3475a83710eSEric Fiselier } 3485a83710eSEric Fiselier { 3495a83710eSEric Fiselier L2 l0; 3505a83710eSEric Fiselier L1 l1; 3515a83710eSEric Fiselier L2 l2; 3525a83710eSEric Fiselier try 3535a83710eSEric Fiselier { 3545a83710eSEric Fiselier std::lock(l0, l1, l2); 3555a83710eSEric Fiselier assert(false); 3565a83710eSEric Fiselier } 3575a83710eSEric Fiselier catch (int) 3585a83710eSEric Fiselier { 3595a83710eSEric Fiselier assert(!l0.locked()); 3605a83710eSEric Fiselier assert(!l1.locked()); 3615a83710eSEric Fiselier assert(!l2.locked()); 3625a83710eSEric Fiselier } 3635a83710eSEric Fiselier } 3645a83710eSEric Fiselier { 3655a83710eSEric Fiselier L1 l0; 3665a83710eSEric Fiselier L2 l1; 3675a83710eSEric Fiselier L2 l2; 3685a83710eSEric Fiselier try 3695a83710eSEric Fiselier { 3705a83710eSEric Fiselier std::lock(l0, l1, l2); 3715a83710eSEric Fiselier assert(false); 3725a83710eSEric Fiselier } 3735a83710eSEric Fiselier catch (int) 3745a83710eSEric Fiselier { 3755a83710eSEric Fiselier assert(!l0.locked()); 3765a83710eSEric Fiselier assert(!l1.locked()); 3775a83710eSEric Fiselier assert(!l2.locked()); 3785a83710eSEric Fiselier } 3795a83710eSEric Fiselier } 3805a83710eSEric Fiselier { 3815a83710eSEric Fiselier L0 l0; 3825a83710eSEric Fiselier L0 l1; 3835a83710eSEric Fiselier L0 l2; 3845a83710eSEric Fiselier L0 l3; 3855a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 3865a83710eSEric Fiselier assert(l0.locked()); 3875a83710eSEric Fiselier assert(l1.locked()); 3885a83710eSEric Fiselier assert(l2.locked()); 3895a83710eSEric Fiselier assert(l3.locked()); 3905a83710eSEric Fiselier } 3915a83710eSEric Fiselier { 3925a83710eSEric Fiselier L0 l0; 3935a83710eSEric Fiselier L0 l1; 3945a83710eSEric Fiselier L0 l2; 3955a83710eSEric Fiselier L1 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 L1 l2; 4065a83710eSEric Fiselier L0 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 L1 l1; 4165a83710eSEric Fiselier L0 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 L1 l0; 4265a83710eSEric Fiselier L0 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 L0 l0; 4375a83710eSEric Fiselier L0 l1; 4385a83710eSEric Fiselier L0 l2; 4395a83710eSEric Fiselier L2 l3; 4405a83710eSEric Fiselier try 4415a83710eSEric Fiselier { 4425a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4435a83710eSEric Fiselier assert(false); 4445a83710eSEric Fiselier } 4455a83710eSEric Fiselier catch (int) 4465a83710eSEric Fiselier { 4475a83710eSEric Fiselier assert(!l0.locked()); 4485a83710eSEric Fiselier assert(!l1.locked()); 4495a83710eSEric Fiselier assert(!l2.locked()); 4505a83710eSEric Fiselier assert(!l3.locked()); 4515a83710eSEric Fiselier } 4525a83710eSEric Fiselier } 4535a83710eSEric Fiselier { 4545a83710eSEric Fiselier L0 l0; 4555a83710eSEric Fiselier L0 l1; 4565a83710eSEric Fiselier L2 l2; 4575a83710eSEric Fiselier L0 l3; 4585a83710eSEric Fiselier try 4595a83710eSEric Fiselier { 4605a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4615a83710eSEric Fiselier assert(false); 4625a83710eSEric Fiselier } 4635a83710eSEric Fiselier catch (int) 4645a83710eSEric Fiselier { 4655a83710eSEric Fiselier assert(!l0.locked()); 4665a83710eSEric Fiselier assert(!l1.locked()); 4675a83710eSEric Fiselier assert(!l2.locked()); 4685a83710eSEric Fiselier assert(!l3.locked()); 4695a83710eSEric Fiselier } 4705a83710eSEric Fiselier } 4715a83710eSEric Fiselier { 4725a83710eSEric Fiselier L0 l0; 4735a83710eSEric Fiselier L2 l1; 4745a83710eSEric Fiselier L0 l2; 4755a83710eSEric Fiselier L0 l3; 4765a83710eSEric Fiselier try 4775a83710eSEric Fiselier { 4785a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4795a83710eSEric Fiselier assert(false); 4805a83710eSEric Fiselier } 4815a83710eSEric Fiselier catch (int) 4825a83710eSEric Fiselier { 4835a83710eSEric Fiselier assert(!l0.locked()); 4845a83710eSEric Fiselier assert(!l1.locked()); 4855a83710eSEric Fiselier assert(!l2.locked()); 4865a83710eSEric Fiselier assert(!l3.locked()); 4875a83710eSEric Fiselier } 4885a83710eSEric Fiselier } 4895a83710eSEric Fiselier { 4905a83710eSEric Fiselier L2 l0; 4915a83710eSEric Fiselier L0 l1; 4925a83710eSEric Fiselier L0 l2; 4935a83710eSEric Fiselier L0 l3; 4945a83710eSEric Fiselier try 4955a83710eSEric Fiselier { 4965a83710eSEric Fiselier std::lock(l0, l1, l2, l3); 4975a83710eSEric Fiselier assert(false); 4985a83710eSEric Fiselier } 4995a83710eSEric Fiselier catch (int) 5005a83710eSEric Fiselier { 5015a83710eSEric Fiselier assert(!l0.locked()); 5025a83710eSEric Fiselier assert(!l1.locked()); 5035a83710eSEric Fiselier assert(!l2.locked()); 5045a83710eSEric Fiselier assert(!l3.locked()); 5055a83710eSEric Fiselier } 5065a83710eSEric Fiselier } 5075a83710eSEric Fiselier #endif // _LIBCPP_HAS_NO_VARIADICS 5085a83710eSEric Fiselier } 509