From dc32269e659cebaa6c3a199976fbf8cf616c7b29 Mon Sep 17 00:00:00 2001 From: Guy Maurel Date: Sat, 15 May 2021 18:38:11 +0200 Subject: [PATCH] use default only with a switch --- src/brace_cleanup.cpp | 29 +++++++++++++++---------- tests/cpp.test | 1 + tests/expected/cpp/30225-Issue_3176.cpp | 1 + tests/input/cpp/Issue_3176.cpp | 1 + 4 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 tests/expected/cpp/30225-Issue_3176.cpp create mode 100644 tests/input/cpp/Issue_3176.cpp diff --git a/src/brace_cleanup.cpp b/src/brace_cleanup.cpp index 03ab68e3f8..a650cfa0c2 100644 --- a/src/brace_cleanup.cpp +++ b/src/brace_cleanup.cpp @@ -720,7 +720,6 @@ static void parse_cleanup(BraceState &braceState, ParseFrame &frm, chunk_t *pc) set_chunk_parent(pc, parent); } // Issue #2281 - LOG_FMT(LBCSPOP, "%s(%d):\n", __func__, __LINE__); if ( chunk_is_token(pc, CT_BRACE_OPEN) && pc->parent_type == CT_SWITCH) @@ -740,18 +739,26 @@ static void parse_cleanup(BraceState &braceState, ParseFrame &frm, chunk_t *pc) if ( chunk_is_token(pc, CT_CASE) || chunk_is_token(pc, CT_DEFAULT)) { - LOG_FMT(LBCSPOP, "%s(%d): pc->orig_line is %zu, pc->orig_col is %zu\n", - __func__, __LINE__, pc->orig_line, pc->orig_col); - set_chunk_parent(pc, CT_SWITCH); - size_t idx = frm.size(); - LOG_FMT(LBCSPOP, "%s(%d): idx is %zu\n", - __func__, __LINE__, idx); - chunk_t *saved = frm.at(idx - 2).pc; + chunk_t *prev = chunk_get_prev_ncnnl(pc); // Issue #3176 - if (saved != nullptr) + if ( chunk_is_token(pc, CT_CASE) + || ( chunk_is_token(pc, CT_DEFAULT) + && chunk_is_not_token(prev, CT_ASSIGN))) { - // set parent member - chunk_set_parent(pc, saved); + // it is a CT_DEFAULT from a switch + LOG_FMT(LBCSPOP, "%s(%d): pc->orig_line is %zu, pc->orig_col is %zu\n", + __func__, __LINE__, pc->orig_line, pc->orig_col); + set_chunk_parent(pc, CT_SWITCH); + size_t idx = frm.size(); + LOG_FMT(LBCSPOP, "%s(%d): idx is %zu\n", + __func__, __LINE__, idx); + chunk_t *saved = frm.at(idx - 2).pc; + + if (saved != nullptr) + { + // set parent member + chunk_set_parent(pc, saved); + } } } diff --git a/tests/cpp.test b/tests/cpp.test index 84bbaa0f96..e8d1f50cd9 100644 --- a/tests/cpp.test +++ b/tests/cpp.test @@ -179,6 +179,7 @@ 30222 sp_assign_default.cfg cpp/trailing_return.cpp 30223 sp_enum_colon.cfg cpp/sp_enum_colon.cpp 30224 sp_enum_colon-r.cfg cpp/sp_enum_colon.cpp +30225 empty.cfg cpp/Issue_3176.cpp 30230 sp_type_func-r.cfg cpp/sp_type_func.cpp 30231 sp_type_func-f.cfg cpp/sp_type_func.cpp diff --git a/tests/expected/cpp/30225-Issue_3176.cpp b/tests/expected/cpp/30225-Issue_3176.cpp new file mode 100644 index 0000000000..2384027d8f --- /dev/null +++ b/tests/expected/cpp/30225-Issue_3176.cpp @@ -0,0 +1 @@ +SecureStorage::~SecureStorage() = default; diff --git a/tests/input/cpp/Issue_3176.cpp b/tests/input/cpp/Issue_3176.cpp new file mode 100644 index 0000000000..2384027d8f --- /dev/null +++ b/tests/input/cpp/Issue_3176.cpp @@ -0,0 +1 @@ +SecureStorage::~SecureStorage() = default;