Skip to content

Commit 779b983

Browse files
committed
Fix optimization problem in GCC 8 -O3
1 parent b0313d7 commit 779b983

File tree

4 files changed

+24
-12
lines changed

4 files changed

+24
-12
lines changed

src/c4/yml/detail/dbgprint.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@
5454
#define RYML_LOGBUF_SIZE_MAX RYML_ERRMSG_SIZE
5555

5656
#include <c4/dump.hpp>
57+
58+
C4_SUPPRESS_WARNING_GCC_WITH_PUSH("-Wattributes")
59+
5760
namespace c4 {
5861
inline bool& _dbg_enabled() { static bool enabled = true; return enabled; }
5962
inline C4_NO_INLINE void _dbg_set_enabled(bool yes) { _dbg_enabled() = yes; }
@@ -153,6 +156,8 @@ inline C4_NO_INLINE void __c4presc(const char *s, size_t len, bool keep_newlines
153156
}
154157
} // namespace c4
155158

159+
C4_SUPPRESS_WARNING_GCC_POP
160+
156161
#endif // RYML_DBG
157162

158163
#endif /* _C4_YML_DETAIL_DBGPRINT_HPP_ */

src/c4/yml/parse_engine.def.hpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1984,14 +1984,15 @@ typename ParseEngine<EventHandler>::ScannedScalar ParseEngine<EventHandler>::_sc
19841984

19851985
size_t numlines = 1; // we already have one line
19861986
size_t pos = npos; // find the pos of the matching quote
1987+
auto *st = m_evt_handler->m_curr; // prevent erroneous hoist of the assignment out of the loop
19871988
while( ! _finished_file())
19881989
{
1989-
const csubstr line = m_evt_handler->m_curr->line_contents.rem;
1990-
#if defined(__GNUC__) && __GNUC__ == 11
1990+
const csubstr line = st->line_contents.rem;
1991+
#if defined(__GNUC__) && (__GNUC__ == 11 || __GNUC__ == 8)
19911992
C4_DONT_OPTIMIZE(line); // prevent erroneous hoist of the assignment out of the loop
19921993
#endif
19931994
bool line_is_blank = true;
1994-
_c4dbgpf("scanning double quoted scalar @ line[{}]: line='{}'", m_evt_handler->m_curr->pos.line, line);
1995+
_c4dbgpf("scanning double quoted scalar @ line[{}]: line='{}'", st->pos.line, line);
19951996
for(size_t i = 0; i < line.len; ++i)
19961997
{
19971998
const char curr = line.str[i];
@@ -2026,9 +2027,9 @@ typename ParseEngine<EventHandler>::ScannedScalar ParseEngine<EventHandler>::_sc
20262027
else
20272028
{
20282029
_RYML_ASSERT_BASIC_(m_evt_handler->m_stack.m_callbacks, pos >= 0 && pos < m_buf.len);
2029-
_RYML_ASSERT_BASIC_(m_evt_handler->m_stack.m_callbacks, m_buf[m_evt_handler->m_curr->pos.offset + pos] == '"');
2030+
_RYML_ASSERT_BASIC_(m_evt_handler->m_stack.m_callbacks, m_buf[st->pos.offset + pos] == '"');
20302031
_line_progressed(pos + 1); // progress beyond the quote
2031-
pos = m_evt_handler->m_curr->pos.offset - b - 1; // but we stop before it
2032+
pos = st->pos.offset - b - 1; // but we stop before it
20322033
break;
20332034
}
20342035

@@ -2050,7 +2051,7 @@ typename ParseEngine<EventHandler>::ScannedScalar ParseEngine<EventHandler>::_sc
20502051

20512052
_c4prscalar("scanned dquoted scalar", s, /*keep_newlines*/true);
20522053

2053-
return ScannedScalar { s, needs_filter };
2054+
return ScannedScalar{s, needs_filter};
20542055
}
20552056

20562057

src_extra/c4/yml/extra/event_handler_ints.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -971,13 +971,13 @@ struct EventHandlerInts : public c4::yml::EventHandlerStack<EventHandlerInts, Ev
971971

972972
C4_ALWAYS_INLINE void set_key_scalar_dquoted(csubstr scalar)
973973
{
974-
_c4dbgpf("{}/{}: set_key_scalar_dquo: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str-m_src.str, scalar.len, scalar);
974+
_c4dbgpf("{}/{}: set_key_scalar_dquo: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str?scalar.str-m_src.str:m_src.len, scalar.len, scalar.str?scalar:csubstr{});
975975
_send_key_scalar_(scalar, ievt::DQUO);
976976
_enable_(c4::yml::KEY|c4::yml::KEY_DQUO);
977977
}
978978
C4_ALWAYS_INLINE void set_val_scalar_dquoted(csubstr scalar)
979979
{
980-
_c4dbgpf("{}/{}: set_val_scalar_dquo: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str-m_src.str, scalar.len, scalar);
980+
_c4dbgpf("{}/{}: set_val_scalar_dquo: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str?scalar.str-m_src.str:m_src.len, scalar.len, scalar.str?scalar:csubstr{});
981981
_send_val_scalar_(scalar, ievt::DQUO);
982982
_enable_(c4::yml::VAL|c4::yml::VAL_DQUO);
983983
}
@@ -999,27 +999,27 @@ struct EventHandlerInts : public c4::yml::EventHandlerStack<EventHandlerInts, Ev
999999

10001000
C4_ALWAYS_INLINE void set_key_scalar_literal(csubstr scalar)
10011001
{
1002-
_c4dbgpf("{}/{}: set_key_scalar_literal: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str-m_src.str, scalar.len, scalar);
1002+
_c4dbgpf("{}/{}: set_key_scalar_literal: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str?scalar.str-m_src.str:m_src.len, scalar.len, scalar.str?scalar:csubstr{});
10031003
_send_key_scalar_(scalar, ievt::LITL);
10041004
_enable_(c4::yml::KEY|c4::yml::KEY_LITERAL);
10051005
}
10061006
C4_ALWAYS_INLINE void set_val_scalar_literal(csubstr scalar)
10071007
{
1008-
_c4dbgpf("{}/{}: set_val_scalar_literal: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str-m_src.str, scalar.len, scalar);
1008+
_c4dbgpf("{}/{}: set_val_scalar_literal: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str?scalar.str-m_src.str:m_src.len, scalar.len, scalar.str?scalar:csubstr{});
10091009
_send_val_scalar_(scalar, ievt::LITL);
10101010
_enable_(c4::yml::VAL|c4::yml::VAL_LITERAL);
10111011
}
10121012

10131013

10141014
C4_ALWAYS_INLINE void set_key_scalar_folded(csubstr scalar)
10151015
{
1016-
_c4dbgpf("{}/{}: set_key_scalar_folded: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str-m_src.str, scalar.len, scalar);
1016+
_c4dbgpf("{}/{}: set_key_scalar_folded: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str?scalar.str-m_src.str:m_src.len, scalar.len, scalar.str?scalar:csubstr{});
10171017
_send_key_scalar_(scalar, ievt::FOLD);
10181018
_enable_(c4::yml::KEY|c4::yml::KEY_FOLDED);
10191019
}
10201020
C4_ALWAYS_INLINE void set_val_scalar_folded(csubstr scalar)
10211021
{
1022-
_c4dbgpf("{}/{}: set_val_scalar_folded: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str-m_src.str, scalar.len, scalar);
1022+
_c4dbgpf("{}/{}: set_val_scalar_folded: @{} [{}]~~~{}~~~", m_evt_pos, m_evt_size, scalar.str?scalar.str-m_src.str:m_src.len, scalar.len, scalar.str?scalar:csubstr{});
10231023
_send_val_scalar_(scalar, ievt::FOLD);
10241024
_enable_(c4::yml::VAL|c4::yml::VAL_FOLDED);
10251025
}

test/test_lib/test_engine.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,13 +478,16 @@ void name##_impl(EvtHandlerClass &ps)
478478
#if !defined(RYML_DBG)
479479
#define ___(stmt) stmt
480480
#else
481+
481482
#define ___(stmt) \
482483
do \
483484
{ \
484485
stmt; \
485486
_print_handler_info(ps, #stmt, __FILE__, __LINE__); \
486487
} while(0)
487488

489+
C4_SUPPRESS_WARNING_GCC_WITH_PUSH("-Wattributes")
490+
488491
inline C4_NO_INLINE void _print_handler_info(EventHandlerTree const& ps, csubstr stmt, const char *file, int line)
489492
{
490493
if(ps.m_parent)
@@ -529,6 +532,9 @@ inline C4_NO_INLINE void _print_handler_info(EventTransformer<Handler, Transform
529532
{
530533
_print_handler_info(ps.handler, stmt, file, line);
531534
}
535+
536+
C4_SUPPRESS_WARNING_GCC_WITH_PUSH("-Wattributes")
537+
532538
#endif
533539

534540
} // namespace yml

0 commit comments

Comments
 (0)