From 46563373196cb85c0b8130149bfa2abedaa2b0c5 Mon Sep 17 00:00:00 2001 From: Yedidya Feldblum Date: Fri, 5 Jan 2018 22:45:21 -0800 Subject: [PATCH] Use auto for scope-guard locals v.s. folly::ScopeGuard Summary: Use `auto` for scope-guard locals v.s. `folly::ScopeGuard`. Reviewed By: igorsugak, meyering Differential Revision: D6664915 fbshipit-source-id: ea239b712f3f9dc7ef81105aaf82f4b36bc07db5 --- folly/ScopeGuard.h | 5 ++-- folly/experimental/symbolizer/Elf.cpp | 2 +- folly/test/ScopeGuardTest.cpp | 36 +++++++++++--------------- folly/test/function_benchmark/main.cpp | 17 ++++++------ 4 files changed, 26 insertions(+), 34 deletions(-) diff --git a/folly/ScopeGuard.h b/folly/ScopeGuard.h index 68043c35..8d8e420d 100644 --- a/folly/ScopeGuard.h +++ b/folly/ScopeGuard.h @@ -1,5 +1,5 @@ /* - * Copyright 2017 Facebook, Inc. + * Copyright 2011-present Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -47,8 +47,7 @@ namespace folly { * * // If the db insertion that follows fails, we should * // remove it from memory. - * // (You could also declare this as "auto guard = makeGuard(...)") - * ScopeGuard guard = makeGuard([&] { friends_.pop_back(); }); + * auto guard = makeGuard([&] { friends_.pop_back(); }); * * // this will throw an exception upon error, which * // makes the ScopeGuard execute UserCont::pop_back() diff --git a/folly/experimental/symbolizer/Elf.cpp b/folly/experimental/symbolizer/Elf.cpp index 2ff63863..444943ac 100644 --- a/folly/experimental/symbolizer/Elf.cpp +++ b/folly/experimental/symbolizer/Elf.cpp @@ -76,7 +76,7 @@ int ElfFile::openNoThrow( // Always close fd and unmap in case of failure along the way to avoid // check failure above if we leave fd != -1 and the object is recycled // like it is inside SignalSafeElfCache - ScopeGuard guard = makeGuard([&] { reset(); }); + auto guard = makeGuard([&] { reset(); }); struct stat st; int r = fstat(fd_, &st); if (r == -1) { diff --git a/folly/test/ScopeGuardTest.cpp b/folly/test/ScopeGuardTest.cpp index 0b635c02..1303ee74 100644 --- a/folly/test/ScopeGuardTest.cpp +++ b/folly/test/ScopeGuardTest.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2017 Facebook, Inc. + * Copyright 2011-present Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,7 +23,6 @@ #include -using folly::ScopeGuard; using folly::makeGuard; using std::vector; @@ -47,7 +46,7 @@ TEST(ScopeGuard, DifferentWaysToBind) { { // There is implicit conversion from func pointer // double (*)() to function. - ScopeGuard g = makeGuard(returnsDouble); + auto g = makeGuard(returnsDouble); (void)g; } @@ -57,42 +56,42 @@ TEST(ScopeGuard, DifferentWaysToBind) { v.push_back(1); { // binding to member function. - ScopeGuard g = makeGuard(std::bind(&vector::pop_back, &v)); + auto g = makeGuard(std::bind(&vector::pop_back, &v)); (void)g; } EXPECT_EQ(0, v.size()); { // bind member function with args. v is passed-by-value! - ScopeGuard g = makeGuard(std::bind(push_back, v, 2)); + auto g = makeGuard(std::bind(push_back, v, 2)); (void)g; } EXPECT_EQ(0, v.size()); // push_back happened on a copy of v... fail! // pass in an argument by pointer so to avoid copy. { - ScopeGuard g = makeGuard(std::bind(push_back, &v, 4)); + auto g = makeGuard(std::bind(push_back, &v, 4)); (void)g; } EXPECT_EQ(1, v.size()); { // pass in an argument by reference so to avoid copy. - ScopeGuard g = makeGuard(std::bind(push_back, std::ref(v), 4)); + auto g = makeGuard(std::bind(push_back, std::ref(v), 4)); (void)g; } EXPECT_EQ(2, v.size()); // lambda with a reference to v { - ScopeGuard g = makeGuard([&] { v.push_back(5); }); + auto g = makeGuard([&] { v.push_back(5); }); (void)g; } EXPECT_EQ(3, v.size()); // lambda with a copy of v { - ScopeGuard g = makeGuard([v] () mutable { v.push_back(6); }); + auto g = makeGuard([v]() mutable { v.push_back(6); }); (void)g; } EXPECT_EQ(3, v.size()); @@ -101,7 +100,7 @@ TEST(ScopeGuard, DifferentWaysToBind) { int n = 0; { MyFunctor f(&n); - ScopeGuard g = makeGuard(f); + auto g = makeGuard(f); (void)g; } EXPECT_EQ(1, n); @@ -109,7 +108,7 @@ TEST(ScopeGuard, DifferentWaysToBind) { // temporary functor object n = 0; { - ScopeGuard g = makeGuard(MyFunctor(&n)); + auto g = makeGuard(MyFunctor(&n)); (void)g; } EXPECT_EQ(1, n); @@ -132,14 +131,9 @@ TEST(ScopeGuard, DifferentWaysToBind) { } TEST(ScopeGuard, GuardException) { - EXPECT_DEATH({ - ScopeGuard g = makeGuard([&] { - throw std::runtime_error("destructors should never throw!"); - }); - (void)g; - }, - "destructors should never throw!" - ); + EXPECT_DEATH( + makeGuard([] { throw std::runtime_error("dtors should never throw!"); }), + "dtors should never throw!"); } /** @@ -155,7 +149,7 @@ void testUndoAction(bool failure) { v.push_back(1); // The guard is triggered to undo the insertion unless dismiss() is called. - ScopeGuard guard = makeGuard([&] { v.pop_back(); }); + auto guard = makeGuard([&] { v.pop_back(); }); // Do some action; Use the failure argument to pretend // if it failed or succeeded. @@ -207,7 +201,7 @@ void testFinally(ErrorBehavior error) { bool cleanupOccurred = false; try { - ScopeGuard guard = makeGuard([&] { cleanupOccurred = true; }); + auto guard = makeGuard([&] { cleanupOccurred = true; }); (void)guard; try { diff --git a/folly/test/function_benchmark/main.cpp b/folly/test/function_benchmark/main.cpp index 18e8b929..7b12aba3 100644 --- a/folly/test/function_benchmark/main.cpp +++ b/folly/test/function_benchmark/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2017 Facebook, Inc. + * Copyright 2011-present Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,7 +23,6 @@ #include #include -using folly::ScopeGuard; using folly::makeGuard; // Declare the bm_max_iters flag from folly/Benchmark.cpp @@ -158,7 +157,7 @@ BENCHMARK(std_bind_direct_invoke, iters) { BENCHMARK(scope_guard_std_function, iters) { std::function fn(doNothing); for (size_t n = 0; n < iters; ++n) { - ScopeGuard g = makeGuard(fn); + auto g = makeGuard(fn); (void)g; } } @@ -167,7 +166,7 @@ BENCHMARK(scope_guard_std_function, iters) { // but create the ScopeGuard with an rvalue to a std::function BENCHMARK(scope_guard_std_function_rvalue, iters) { for (size_t n = 0; n < iters; ++n) { - ScopeGuard g = makeGuard(std::function(doNothing)); + auto g = makeGuard(std::function(doNothing)); (void)g; } } @@ -176,7 +175,7 @@ BENCHMARK(scope_guard_std_function_rvalue, iters) { // but create the ScopeGuard with an rvalue to a folly::Function BENCHMARK(scope_guard_Function_rvalue, iters) { for (size_t n = 0; n < iters; ++n) { - ScopeGuard g = makeGuard(folly::Function(doNothing)); + auto g = makeGuard(folly::Function(doNothing)); (void)g; } } @@ -184,7 +183,7 @@ BENCHMARK(scope_guard_Function_rvalue, iters) { // Using ScopeGuard to invoke a function pointer BENCHMARK(scope_guard_fn_ptr, iters) { for (size_t n = 0; n < iters; ++n) { - ScopeGuard g = makeGuard(doNothing); + auto g = makeGuard(doNothing); (void)g; } } @@ -192,7 +191,7 @@ BENCHMARK(scope_guard_fn_ptr, iters) { // Using ScopeGuard to invoke a lambda that does nothing BENCHMARK(scope_guard_lambda_noop, iters) { for (size_t n = 0; n < iters; ++n) { - ScopeGuard g = makeGuard([] {}); + auto g = makeGuard([] {}); (void)g; } } @@ -200,7 +199,7 @@ BENCHMARK(scope_guard_lambda_noop, iters) { // Using ScopeGuard to invoke a lambda that invokes a function BENCHMARK(scope_guard_lambda_function, iters) { for (size_t n = 0; n < iters; ++n) { - ScopeGuard g = makeGuard([] { doNothing(); }); + auto g = makeGuard([] { doNothing(); }); (void)g; } } @@ -209,7 +208,7 @@ BENCHMARK(scope_guard_lambda_function, iters) { BENCHMARK(scope_guard_lambda_local_var, iters) { uint32_t count = 0; for (size_t n = 0; n < iters; ++n) { - ScopeGuard g = makeGuard([&] { + auto g = makeGuard([&] { // Increment count if n is odd. Without this conditional check // (i.e., if we just increment count each time through the loop), // gcc is smart enough to optimize the entire loop away, and just set -- 2.34.1