From db2222583b097704f83251bdc5620fa1dc9f359a Mon Sep 17 00:00:00 2001 From: Jakub Strzebonski Date: Fri, 14 Jan 2022 12:47:33 +0100 Subject: [PATCH 1/7] #1636 add API for temporarily enabling/disabling debug prints --- src/vt/configs/debug/debug_print.h | 67 ++++++++++ src/vt/runtime/runtime_get.cc | 12 +- .../test_temp_enabling_debug_prints.nompi.cc | 114 ++++++++++++++++++ 3 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 tests/unit/runtime/test_temp_enabling_debug_prints.nompi.cc diff --git a/src/vt/configs/debug/debug_print.h b/src/vt/configs/debug/debug_print.h index f252dd9d8a..c2db0c37a1 100644 --- a/src/vt/configs/debug/debug_print.h +++ b/src/vt/configs/debug/debug_print.h @@ -159,6 +159,73 @@ #define vt_option_check_enabled(mode, bit) ((mode & bit) not_eq 0) +#define vt_debug_temp_enable_opt(opt) \ + ::vt::debug::preConfigRef()->vt_debug_##opt = true + +#define vt_debug_temp_disable_opt(opt) \ + ::vt::debug::preConfigRef()->vt_debug_##opt = false + +#define vt_debug_scoped_enable_opt(opt) \ + ScopedModifier_##opt##_##true { } + +#define vt_debug_scoped_disable_opt(opt) \ + ScopedModifier_##opt##_##false { } + +#define vt_scoped_modifier_opt(opt, val) \ + struct ScopedModifier_##opt##_##val { \ + ScopedModifier_##opt##_##val() \ + : origVal{::vt::debug::preConfig()->vt_debug_##opt} { \ + ::vt::debug::preConfigRef()->vt_debug_##opt = val; \ + } \ + \ + ~ScopedModifier_##opt##_##val() { \ + ::vt::debug::preConfigRef()->vt_debug_##opt = origVal; \ + } \ + \ + private: \ + bool origVal; \ + } + +#define vt_define_debug_scoped_modifiers(opt) \ + vt_scoped_modifier_opt(opt, true); \ + vt_scoped_modifier_opt(opt, false) + +vt_define_debug_scoped_modifiers(all); +vt_define_debug_scoped_modifiers(none); +vt_define_debug_scoped_modifiers(gen); +vt_define_debug_scoped_modifiers(runtime); +vt_define_debug_scoped_modifiers(active); +vt_define_debug_scoped_modifiers(term); +vt_define_debug_scoped_modifiers(termds); +vt_define_debug_scoped_modifiers(barrier); +vt_define_debug_scoped_modifiers(event); +vt_define_debug_scoped_modifiers(pipe); +vt_define_debug_scoped_modifiers(pool); +vt_define_debug_scoped_modifiers(reduce); +vt_define_debug_scoped_modifiers(rdma); +vt_define_debug_scoped_modifiers(rdma_channel); +vt_define_debug_scoped_modifiers(rdma_state); +vt_define_debug_scoped_modifiers(param); +vt_define_debug_scoped_modifiers(handler); +vt_define_debug_scoped_modifiers(hierlb); +vt_define_debug_scoped_modifiers(temperedlb); +vt_define_debug_scoped_modifiers(scatter); +vt_define_debug_scoped_modifiers(sequence); +vt_define_debug_scoped_modifiers(sequence_vrt); +vt_define_debug_scoped_modifiers(serial_msg); +vt_define_debug_scoped_modifiers(trace); +vt_define_debug_scoped_modifiers(location); +vt_define_debug_scoped_modifiers(lb); +vt_define_debug_scoped_modifiers(vrt); +vt_define_debug_scoped_modifiers(vrt_coll); +vt_define_debug_scoped_modifiers(worker); +vt_define_debug_scoped_modifiers(group); +vt_define_debug_scoped_modifiers(broadcast); +vt_define_debug_scoped_modifiers(objgroup); +vt_define_debug_scoped_modifiers(phase); +vt_define_debug_scoped_modifiers(context); +vt_define_debug_scoped_modifiers(epoch); + namespace vt { namespace runtime { struct Runtime; }} /* end namespace vt::runtime */ diff --git a/src/vt/runtime/runtime_get.cc b/src/vt/runtime/runtime_get.cc index 2a3d86a574..014cc0f07b 100644 --- a/src/vt/runtime/runtime_get.cc +++ b/src/vt/runtime/runtime_get.cc @@ -168,8 +168,16 @@ static arguments::AppConfig preInitAppConfig{}; * * \return A modifiable configuration */ -arguments::AppConfig* preConfigRef(){ - return &preInitAppConfig; +arguments::AppConfig* preConfigRef() { + if (not curRT) + return &preInitAppConfig; + + auto* config = curRT->theArgConfig; + if (not config) { + return &preInitAppConfig; + } + + return &config->config_; } /** diff --git a/tests/unit/runtime/test_temp_enabling_debug_prints.nompi.cc b/tests/unit/runtime/test_temp_enabling_debug_prints.nompi.cc new file mode 100644 index 0000000000..50352f32cf --- /dev/null +++ b/tests/unit/runtime/test_temp_enabling_debug_prints.nompi.cc @@ -0,0 +1,114 @@ +/* +//@HEADER +// ***************************************************************************** +// +// test_temp_enabling_debug_prints.nompi.cc +// DARMA/vt => Virtual Transport +// +// Copyright 2019-2021 National Technology & Engineering Solutions of Sandia, LLC +// (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S. +// Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact darma@sandia.gov +// +// ***************************************************************************** +//@HEADER +*/ + +#include + +#include "test_harness.h" + +#include +#include + +namespace vt { namespace tests { namespace unit { + +struct TestTempEnablingDisablingDebugPrints : TestHarness { }; + +TEST_F(TestTempEnablingDisablingDebugPrints, test_manual_enabling_disabling) { + vt::initialize(); + + EXPECT_EQ(theConfig()->vt_debug_all, false); + EXPECT_EQ(theConfig()->vt_debug_termds, false); + EXPECT_EQ(theConfig()->vt_debug_param, false); + EXPECT_EQ(theConfig()->vt_debug_scatter, false); + + vt_debug_temp_enable_opt(all); + vt_debug_temp_enable_opt(termds); + vt_debug_temp_enable_opt(param); + vt_debug_temp_enable_opt(scatter); + + EXPECT_EQ(theConfig()->vt_debug_all, true); + EXPECT_EQ(theConfig()->vt_debug_termds, true); + EXPECT_EQ(theConfig()->vt_debug_param, true); + EXPECT_EQ(theConfig()->vt_debug_scatter, true); + + vt_debug_temp_disable_opt(all); + vt_debug_temp_disable_opt(termds); + vt_debug_temp_disable_opt(param); + vt_debug_temp_disable_opt(scatter); + + EXPECT_EQ(theConfig()->vt_debug_all, false); + EXPECT_EQ(theConfig()->vt_debug_termds, false); + EXPECT_EQ(theConfig()->vt_debug_param, false); + EXPECT_EQ(theConfig()->vt_debug_scatter, false); + + vt::finalize(); +} + +TEST_F(TestTempEnablingDisablingDebugPrints, test_scoped_enabling_disabling) { + vt::initialize(); + + EXPECT_EQ(theConfig()->vt_debug_none, false); + EXPECT_EQ(theConfig()->vt_debug_active, false); + EXPECT_EQ(theConfig()->vt_debug_reduce, false); + EXPECT_EQ(theConfig()->vt_debug_context, false); + + { + auto const scopedEnabledNone = vt_debug_scoped_enable_opt(none); + auto const scopedEnabledActive = vt_debug_scoped_enable_opt(active); + auto const scopedEnabledReduce = vt_debug_scoped_enable_opt(reduce); + auto const scopedEnabledContext = vt_debug_scoped_enable_opt(context); + + EXPECT_EQ(theConfig()->vt_debug_none, true); + EXPECT_EQ(theConfig()->vt_debug_active, true); + EXPECT_EQ(theConfig()->vt_debug_reduce, true); + EXPECT_EQ(theConfig()->vt_debug_context, true); + } + + EXPECT_EQ(theConfig()->vt_debug_none, false); + EXPECT_EQ(theConfig()->vt_debug_active, false); + EXPECT_EQ(theConfig()->vt_debug_reduce, false); + EXPECT_EQ(theConfig()->vt_debug_context, false); + + vt::finalize(); +} + +}}} // end namespace vt::tests::unit From e6d3e569636fb0e0cb18dad1e476484a4e9a5c0b Mon Sep 17 00:00:00 2001 From: Jakub Strzebonski Date: Tue, 18 Jan 2022 14:50:34 +0100 Subject: [PATCH 2/7] #1636 document new functionality --- src/vt/configs/debug/debug_print.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/vt/configs/debug/debug_print.h b/src/vt/configs/debug/debug_print.h index c2db0c37a1..19c1dd50aa 100644 --- a/src/vt/configs/debug/debug_print.h +++ b/src/vt/configs/debug/debug_print.h @@ -159,15 +159,45 @@ #define vt_option_check_enabled(mode, bit) ((mode & bit) not_eq 0) +/** + * \brief Temporarily enable debug print option +*/ #define vt_debug_temp_enable_opt(opt) \ ::vt::debug::preConfigRef()->vt_debug_##opt = true +/** + * \brief Temporarily disable debug print option +*/ #define vt_debug_temp_disable_opt(opt) \ ::vt::debug::preConfigRef()->vt_debug_##opt = false +/** + * \brief Temporarily enable debug print option in given scope. When exiting + * a scope, it restores original option value. + * + * Usage: + * { + * ... + * auto const scopedEnabledContext = vt_debug_scoped_enable_opt(context); + * ... + * } + } +*/ #define vt_debug_scoped_enable_opt(opt) \ ScopedModifier_##opt##_##true { } +/** + * \brief Temporarily disable debug print option in given scope. When exiting + * a scope, it restores original option value. + * + * Usage: + * { + * ... + * auto const scopedDisabledContext = vt_debug_scoped_disable_opt(context); + * ... + * } + } +*/ #define vt_debug_scoped_disable_opt(opt) \ ScopedModifier_##opt##_##false { } From 9896d945efb97375aa45b5a0845f7c45cf40bbd9 Mon Sep 17 00:00:00 2001 From: Jakub Strzebonski Date: Wed, 19 Jan 2022 19:24:27 +0100 Subject: [PATCH 3/7] #1636 use theConfig instead of preConfigRef --- src/vt/configs/debug/debug_print.h | 38 +++++++++++++++++------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/vt/configs/debug/debug_print.h b/src/vt/configs/debug/debug_print.h index 19c1dd50aa..007cfabe1f 100644 --- a/src/vt/configs/debug/debug_print.h +++ b/src/vt/configs/debug/debug_print.h @@ -160,20 +160,23 @@ #define vt_option_check_enabled(mode, bit) ((mode & bit) not_eq 0) /** - * \brief Temporarily enable debug print option + * \brief Temporarily enable debug print option. + * vt needs to be initialized before usage. */ #define vt_debug_temp_enable_opt(opt) \ - ::vt::debug::preConfigRef()->vt_debug_##opt = true + ::vt::theConfig()->vt_debug_##opt = true /** - * \brief Temporarily disable debug print option + * \brief Temporarily disable debug print option. + * vt needs to be initialized before usage. */ #define vt_debug_temp_disable_opt(opt) \ - ::vt::debug::preConfigRef()->vt_debug_##opt = false + ::vt::theConfig()->vt_debug_##opt = false /** * \brief Temporarily enable debug print option in given scope. When exiting * a scope, it restores original option value. + * vt needs to be initialized before usage. * * Usage: * { @@ -189,6 +192,7 @@ /** * \brief Temporarily disable debug print option in given scope. When exiting * a scope, it restores original option value. + * vt needs to be initialized before usage. * * Usage: * { @@ -201,19 +205,19 @@ #define vt_debug_scoped_disable_opt(opt) \ ScopedModifier_##opt##_##false { } -#define vt_scoped_modifier_opt(opt, val) \ - struct ScopedModifier_##opt##_##val { \ - ScopedModifier_##opt##_##val() \ - : origVal{::vt::debug::preConfig()->vt_debug_##opt} { \ - ::vt::debug::preConfigRef()->vt_debug_##opt = val; \ - } \ - \ - ~ScopedModifier_##opt##_##val() { \ - ::vt::debug::preConfigRef()->vt_debug_##opt = origVal; \ - } \ - \ - private: \ - bool origVal; \ +#define vt_scoped_modifier_opt(opt, val) \ + struct ScopedModifier_##opt##_##val { \ + ScopedModifier_##opt##_##val() \ + : origVal{::vt::theConfig()->vt_debug_##opt} { \ + ::vt::theConfig()->vt_debug_##opt = val; \ + } \ + \ + ~ScopedModifier_##opt##_##val() { \ + ::vt::theConfig()->vt_debug_##opt = origVal; \ + } \ + \ + private: \ + bool origVal; \ } #define vt_define_debug_scoped_modifiers(opt) \ From 5db473cdc3f680fa36f5f5535183cd3fbe2faa97 Mon Sep 17 00:00:00 2001 From: Jakub Strzebonski Date: Wed, 19 Jan 2022 19:25:27 +0100 Subject: [PATCH 4/7] #1636 revert preConfigRef changes --- src/vt/runtime/runtime_get.cc | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/vt/runtime/runtime_get.cc b/src/vt/runtime/runtime_get.cc index 014cc0f07b..e7260d5882 100644 --- a/src/vt/runtime/runtime_get.cc +++ b/src/vt/runtime/runtime_get.cc @@ -169,15 +169,7 @@ static arguments::AppConfig preInitAppConfig{}; * \return A modifiable configuration */ arguments::AppConfig* preConfigRef() { - if (not curRT) - return &preInitAppConfig; - - auto* config = curRT->theArgConfig; - if (not config) { - return &preInitAppConfig; - } - - return &config->config_; + return &preInitAppConfig; } /** From fd710cb2dcc7333a900e756a32322642c18041a7 Mon Sep 17 00:00:00 2001 From: Jakub Strzebonski Date: Mon, 24 Jan 2022 19:34:07 +0100 Subject: [PATCH 5/7] #1636 change preprocessor directives indenting setting --- .clang-format | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.clang-format b/.clang-format index 5e636a0797..6d9adac5a3 100644 --- a/.clang-format +++ b/.clang-format @@ -60,7 +60,7 @@ FixNamespaceComments: true IncludeBlocks: Preserve IndentCaseLabels: false IndentGotoLabels: false -IndentPPDirectives: BeforeHash +IndentPPDirectives: PPDIS_None IndentWidth: 2 IndentWrappedFunctionNames: false KeepEmptyLinesAtTheStartOfBlocks: false From 75f6630c7332c9cdee796d684912110cd81173db Mon Sep 17 00:00:00 2001 From: Jakub Strzebonski Date: Mon, 24 Jan 2022 19:44:23 +0100 Subject: [PATCH 6/7] #1636 abort if vt is not yet initialized --- src/vt/configs/debug/debug_print.cc | 107 ++++++++++++++++++++++ src/vt/configs/debug/debug_print.h | 136 ++++++++++++++-------------- 2 files changed, 177 insertions(+), 66 deletions(-) create mode 100644 src/vt/configs/debug/debug_print.cc diff --git a/src/vt/configs/debug/debug_print.cc b/src/vt/configs/debug/debug_print.cc new file mode 100644 index 0000000000..bb947163b0 --- /dev/null +++ b/src/vt/configs/debug/debug_print.cc @@ -0,0 +1,107 @@ +/* +//@HEADER +// ***************************************************************************** +// +// debug_print.cc +// DARMA/vt => Virtual Transport +// +// Copyright 2019-2021 National Technology & Engineering Solutions of Sandia, LLC +// (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S. +// Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact darma@sandia.gov +// +// ***************************************************************************** +//@HEADER +*/ + +#include "vt/configs/debug/debug_print.h" +#include "vt/configs/error/hard_error.h" + +#define vt_scoped_modifier_opt_definition(opt, val) \ + ScopedModifier_##opt##_##val::ScopedModifier_##opt##_##val() \ + : orig_val{::vt::theConfig()->vt_debug_##opt} { \ + ::vt::theConfig()->vt_debug_##opt = val; \ + } \ + \ + ScopedModifier_##opt##_##val::~ScopedModifier_##opt##_##val() { \ + ::vt::theConfig()->vt_debug_##opt = orig_val; \ + } \ + \ + ScopedModifier_##opt##_##val createScopedModifier_##opt##_##val() { \ + if (not ::vt::curRT) { \ + vtAbort("Trying to read config when VT is not initialized"); \ + } \ + \ + return ScopedModifier_##opt##_##val{}; \ + } + +#define vt_define_debug_scoped_modifiers(opt) \ + vt_scoped_modifier_opt_definition(opt, true) \ + vt_scoped_modifier_opt_definition(opt, false) + +namespace vt { + +vt_define_debug_scoped_modifiers(all) +vt_define_debug_scoped_modifiers(none) +vt_define_debug_scoped_modifiers(gen) +vt_define_debug_scoped_modifiers(runtime) +vt_define_debug_scoped_modifiers(active) +vt_define_debug_scoped_modifiers(term) +vt_define_debug_scoped_modifiers(termds) +vt_define_debug_scoped_modifiers(barrier) +vt_define_debug_scoped_modifiers(event) +vt_define_debug_scoped_modifiers(pipe) +vt_define_debug_scoped_modifiers(pool) +vt_define_debug_scoped_modifiers(reduce) +vt_define_debug_scoped_modifiers(rdma) +vt_define_debug_scoped_modifiers(rdma_channel) +vt_define_debug_scoped_modifiers(rdma_state) +vt_define_debug_scoped_modifiers(param) +vt_define_debug_scoped_modifiers(handler) +vt_define_debug_scoped_modifiers(hierlb) +vt_define_debug_scoped_modifiers(temperedlb) +vt_define_debug_scoped_modifiers(scatter) +vt_define_debug_scoped_modifiers(sequence) +vt_define_debug_scoped_modifiers(sequence_vrt) +vt_define_debug_scoped_modifiers(serial_msg) +vt_define_debug_scoped_modifiers(trace) +vt_define_debug_scoped_modifiers(location) +vt_define_debug_scoped_modifiers(lb) +vt_define_debug_scoped_modifiers(vrt) +vt_define_debug_scoped_modifiers(vrt_coll) +vt_define_debug_scoped_modifiers(worker) +vt_define_debug_scoped_modifiers(group) +vt_define_debug_scoped_modifiers(broadcast) +vt_define_debug_scoped_modifiers(objgroup) +vt_define_debug_scoped_modifiers(phase) +vt_define_debug_scoped_modifiers(context) +vt_define_debug_scoped_modifiers(epoch) + +} diff --git a/src/vt/configs/debug/debug_print.h b/src/vt/configs/debug/debug_print.h index 007cfabe1f..2310efaf3a 100644 --- a/src/vt/configs/debug/debug_print.h +++ b/src/vt/configs/debug/debug_print.h @@ -162,15 +162,23 @@ /** * \brief Temporarily enable debug print option. * vt needs to be initialized before usage. -*/ -#define vt_debug_temp_enable_opt(opt) \ + */ +#define vt_debug_temp_enable_opt(opt) \ + if (not ::vt::curRT) { \ + vtAbort("Trying to read config when VT is not initialized"); \ + } \ + \ ::vt::theConfig()->vt_debug_##opt = true /** * \brief Temporarily disable debug print option. * vt needs to be initialized before usage. -*/ -#define vt_debug_temp_disable_opt(opt) \ + */ +#define vt_debug_temp_disable_opt(opt) \ + if (not ::vt::curRT) { \ + vtAbort("Trying to read config when VT is not initialized"); \ + } \ + \ ::vt::theConfig()->vt_debug_##opt = false /** @@ -184,10 +192,8 @@ * auto const scopedEnabledContext = vt_debug_scoped_enable_opt(context); * ... * } - } -*/ -#define vt_debug_scoped_enable_opt(opt) \ - ScopedModifier_##opt##_##true { } + */ +#define vt_debug_scoped_enable_opt(opt) createScopedModifier_##opt##_true() /** * \brief Temporarily disable debug print option in given scope. When exiting @@ -200,65 +206,63 @@ * auto const scopedDisabledContext = vt_debug_scoped_disable_opt(context); * ... * } - } -*/ -#define vt_debug_scoped_disable_opt(opt) \ - ScopedModifier_##opt##_##false { } - -#define vt_scoped_modifier_opt(opt, val) \ - struct ScopedModifier_##opt##_##val { \ - ScopedModifier_##opt##_##val() \ - : origVal{::vt::theConfig()->vt_debug_##opt} { \ - ::vt::theConfig()->vt_debug_##opt = val; \ - } \ - \ - ~ScopedModifier_##opt##_##val() { \ - ::vt::theConfig()->vt_debug_##opt = origVal; \ - } \ - \ - private: \ - bool origVal; \ - } + */ +#define vt_debug_scoped_disable_opt(opt) createScopedModifier_##opt##_##false() + +#define vt_scoped_modifier_opt_declaration(opt, val) \ + struct ScopedModifier_##opt##_##val { \ + ScopedModifier_##opt##_##val(); \ + ~ScopedModifier_##opt##_##val(); \ + \ + private: \ + bool orig_val; \ + }; \ + \ + ScopedModifier_##opt##_##val createScopedModifier_##opt##_##val() + +#define vt_declare_debug_scoped_modifiers(opt) \ + vt_scoped_modifier_opt_declaration(opt, true); \ + vt_scoped_modifier_opt_declaration(opt, false) + +namespace vt { -#define vt_define_debug_scoped_modifiers(opt) \ - vt_scoped_modifier_opt(opt, true); \ - vt_scoped_modifier_opt(opt, false) - -vt_define_debug_scoped_modifiers(all); -vt_define_debug_scoped_modifiers(none); -vt_define_debug_scoped_modifiers(gen); -vt_define_debug_scoped_modifiers(runtime); -vt_define_debug_scoped_modifiers(active); -vt_define_debug_scoped_modifiers(term); -vt_define_debug_scoped_modifiers(termds); -vt_define_debug_scoped_modifiers(barrier); -vt_define_debug_scoped_modifiers(event); -vt_define_debug_scoped_modifiers(pipe); -vt_define_debug_scoped_modifiers(pool); -vt_define_debug_scoped_modifiers(reduce); -vt_define_debug_scoped_modifiers(rdma); -vt_define_debug_scoped_modifiers(rdma_channel); -vt_define_debug_scoped_modifiers(rdma_state); -vt_define_debug_scoped_modifiers(param); -vt_define_debug_scoped_modifiers(handler); -vt_define_debug_scoped_modifiers(hierlb); -vt_define_debug_scoped_modifiers(temperedlb); -vt_define_debug_scoped_modifiers(scatter); -vt_define_debug_scoped_modifiers(sequence); -vt_define_debug_scoped_modifiers(sequence_vrt); -vt_define_debug_scoped_modifiers(serial_msg); -vt_define_debug_scoped_modifiers(trace); -vt_define_debug_scoped_modifiers(location); -vt_define_debug_scoped_modifiers(lb); -vt_define_debug_scoped_modifiers(vrt); -vt_define_debug_scoped_modifiers(vrt_coll); -vt_define_debug_scoped_modifiers(worker); -vt_define_debug_scoped_modifiers(group); -vt_define_debug_scoped_modifiers(broadcast); -vt_define_debug_scoped_modifiers(objgroup); -vt_define_debug_scoped_modifiers(phase); -vt_define_debug_scoped_modifiers(context); -vt_define_debug_scoped_modifiers(epoch); +vt_declare_debug_scoped_modifiers(all); +vt_declare_debug_scoped_modifiers(none); +vt_declare_debug_scoped_modifiers(gen); +vt_declare_debug_scoped_modifiers(runtime); +vt_declare_debug_scoped_modifiers(active); +vt_declare_debug_scoped_modifiers(term); +vt_declare_debug_scoped_modifiers(termds); +vt_declare_debug_scoped_modifiers(barrier); +vt_declare_debug_scoped_modifiers(event); +vt_declare_debug_scoped_modifiers(pipe); +vt_declare_debug_scoped_modifiers(pool); +vt_declare_debug_scoped_modifiers(reduce); +vt_declare_debug_scoped_modifiers(rdma); +vt_declare_debug_scoped_modifiers(rdma_channel); +vt_declare_debug_scoped_modifiers(rdma_state); +vt_declare_debug_scoped_modifiers(param); +vt_declare_debug_scoped_modifiers(handler); +vt_declare_debug_scoped_modifiers(hierlb); +vt_declare_debug_scoped_modifiers(temperedlb); +vt_declare_debug_scoped_modifiers(scatter); +vt_declare_debug_scoped_modifiers(sequence); +vt_declare_debug_scoped_modifiers(sequence_vrt); +vt_declare_debug_scoped_modifiers(serial_msg); +vt_declare_debug_scoped_modifiers(trace); +vt_declare_debug_scoped_modifiers(location); +vt_declare_debug_scoped_modifiers(lb); +vt_declare_debug_scoped_modifiers(vrt); +vt_declare_debug_scoped_modifiers(vrt_coll); +vt_declare_debug_scoped_modifiers(worker); +vt_declare_debug_scoped_modifiers(group); +vt_declare_debug_scoped_modifiers(broadcast); +vt_declare_debug_scoped_modifiers(objgroup); +vt_declare_debug_scoped_modifiers(phase); +vt_declare_debug_scoped_modifiers(context); +vt_declare_debug_scoped_modifiers(epoch); + +} // namespace vt namespace vt { namespace runtime { struct Runtime; From c7379fd64913d0a1a1a63b8c7948666ca6b8c99b Mon Sep 17 00:00:00 2001 From: Jakub Strzebonski Date: Tue, 1 Feb 2022 10:09:46 +0100 Subject: [PATCH 7/7] #1636 add missing include --- src/vt/configs/debug/debug_print.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vt/configs/debug/debug_print.cc b/src/vt/configs/debug/debug_print.cc index bb947163b0..0e2df5f60d 100644 --- a/src/vt/configs/debug/debug_print.cc +++ b/src/vt/configs/debug/debug_print.cc @@ -41,6 +41,7 @@ //@HEADER */ +#include "vt/configs/debug/debug_masterconfig.h" #include "vt/configs/debug/debug_print.h" #include "vt/configs/error/hard_error.h"