From 8805a44cf04253f63bce160054e2fbf21ab9beb1 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 1 Jan 2023 22:06:10 -0800 Subject: [PATCH] dfa: work around Clang 15 bug Problem reported by Kenton Groombridge in: https://lists.gnu.org/archive/html/bug-gawk/2022-12/msg00010.html On x86-64, Clang 15 gets confused by a call (X ? dfaerror : dfawarn) (Y) and generates the wrong code, presumably because dfaerror is _Noreturn and dfawarn is not. * lib/dfa.c (parse_bracket_exp): Reword to have one call for dfaerror, the other for dfawarn. --- ChangeLog | 11 +++++++++++ lib/dfa.c | 11 ++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 59500558e4..ac3d388c2b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2023-01-01 Paul Eggert + + dfa: work around Clang 15 bug + Problem reported by Kenton Groombridge in: + https://lists.gnu.org/archive/html/bug-gawk/2022-12/msg00010.html + On x86-64, Clang 15 gets confused by a call (X ? dfaerror : + dfawarn) (Y) and generates the wrong code, presumably because + dfaerror is _Noreturn and dfawarn is not. + * lib/dfa.c (parse_bracket_exp): Reword to have one call for + dfaerror, the other for dfawarn. + 2023-01-01 Bruno Haible doc: Update regarding stable branches. diff --git a/lib/dfa.c b/lib/dfa.c index 57df1e0421..211e1ed18f 100644 --- a/lib/dfa.c +++ b/lib/dfa.c @@ -1138,9 +1138,14 @@ parse_bracket_exp (struct dfa *dfa) while ((wc = wc1, (c = c1) != ']')); if (colon_warning_state == 7) - ((dfa->syntax.dfaopts & DFA_CONFUSING_BRACKETS_ERROR - ? dfaerror : dfawarn) - (_("character class syntax is [[:space:]], not [:space:]"))); + { + char const *msg + = _("character class syntax is [[:space:]], not [:space:]"); + if (dfa->syntax.dfaopts & DFA_CONFUSING_BRACKETS_ERROR) + dfaerror (msg); + else + dfawarn (msg); + } if (! known_bracket_exp) return BACKREF; -- 2.37.2