summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2022-08-16 21:45:13 +0200
committerStephan Bergmann <sbergman@redhat.com>2022-08-17 08:10:13 +0200
commitb3bc93de3115994bb71e0be2700504db967482e0 (patch)
tree5a99eb06640b8f89695338b02c613c5093195cb1
parentc229f0484d906c1a46bbde4e6039d9de05481a80 (diff)
Fix undefined behavior for good
(Where the range of values of LineEnd is [0, 2], see include/tools/lineend.hxx.) 7786bafdb8951aa3f0acda801ddb3704c81d00d8 "workaround -Wenum-constexpr-conversion" had silenced the (unintended, see below) warning about undefined behavior when eEnd was compared against LineEnd(-1), but failed to address the undefined behavior when eEnd was initialized with LineEnd(-1). (On Clang 16 trunk, the original <https://github.com/llvm/llvm-project/commit/b3645353041818f61e2580635409ddb81ff5a272> "[Clang] Diagnose ill-formed constant expression when setting a non fixed enum to a value outside the range of the enumeration values" only emitted diagnostics in constant evaluation contexts, then <https://github.com/llvm/llvm-project/commit/cc104113ddecbdcec2cca848adbb6afa1214e9de> "[Clang] Allow downgrading to a warning the diagnostic for setting a non fixed enum to a value outside the range of the enumeration values" accidentally extended that to other contexts, so caused the unintended warning here, and finally <https://github.com/llvm/llvm-project/commit/4e458765aaef7988e687e190d865f331727825c0> "[Clang] Restrict non fixed enum to a value outside the range of the enumeration values warning to context requiring a constant expression" fixed that mistake and made the unintended warning go away again.) Change-Id: I44c14ed9c9455d05d80baddcb63be97d0bfb0278 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138385 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r--sw/source/ui/dialog/ascfldlg.cxx10
1 files changed, 6 insertions, 4 deletions
diff --git a/sw/source/ui/dialog/ascfldlg.cxx b/sw/source/ui/dialog/ascfldlg.cxx
index 036159ec1aaa..6975cc72df8c 100644
--- a/sw/source/ui/dialog/ascfldlg.cxx
+++ b/sw/source/ui/dialog/ascfldlg.cxx
@@ -19,6 +19,7 @@
#include <sal/config.h>
+#include <optional>
#include <utility>
#include <hintids.hxx>
@@ -364,7 +365,8 @@ void SwAsciiFilterDlg::UpdateIncludeBOMSensitiveState()
IMPL_LINK_NOARG(SwAsciiFilterDlg, CharSetSelHdl, weld::ComboBox&, void)
{
- LineEnd eOldEnd = GetCRLF(), eEnd = LineEnd(-1);
+ LineEnd eOldEnd = GetCRLF();
+ std::optional<LineEnd> eEnd;
LanguageType nLng = m_xFontLB->get_visible()
? m_xLanguageLB->get_active_id()
: LANGUAGE_SYSTEM,
@@ -418,10 +420,10 @@ IMPL_LINK_NOARG(SwAsciiFilterDlg, CharSetSelHdl, weld::ComboBox&, void)
}
m_bSaveLineStatus = false;
- if( static_cast<int>(eEnd) != -1 ) // changed?
+ if( eEnd ) // changed?
{
- if( eOldEnd != eEnd )
- SetCRLF( eEnd );
+ if( eOldEnd != *eEnd )
+ SetCRLF( *eEnd );
}
else
{