sw/inc/ndindex.hxx | 9 +++++++++
1 file changed, 9 insertions(+)
New commits:
commit 21e0122310dedf3b33144cc77f880ec51446186b
Author: Michael Stahl <[email protected]>
AuthorDate: Sun May 22 13:50:11 2022 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Tue Jun 7 17:35:30 2022 +0200
sw: SwNodeIndex GCC12 spurious -Werror=dangling-pointer=
It doesn't understand that ~SwNodeIndex() will remove the pointer,
which is obfuscated by over-boostified code.
In member function ‘void SwNodeIndex::RegisterIndex(SwNodes&)’,
inlined from ‘SwNodeIndex::SwNodeIndex(SwNodes&, SwNodeOffset)’ at
sw/inc/ndindex.hxx:54:22,
inlined from ‘bool SwNodes::InsBoxen(SwTableNode*, SwTableLine*,
SwTableBoxFormat*, SwTextFormatColl*, const SfxItemSet*, sal_uInt16,
sal_uInt16)’ at sw/source/core/docnode/ndtbl.cxx:301:41:
sw/inc/ndindex.hxx:37:31: error: storing the address of local variable
‘aEndIdx’ in ‘*this.SwNodes::m_vIndices’ [-Werror=dangling-pointer=]
37 | rNodes.m_vIndices = this;
| ~~~~~~~~~~~~~~~~~~^~~~~~
sw/source/core/docnode/ndtbl.cxx: In member function ‘bool
SwNodes::InsBoxen(SwTableNode*, SwTableLine*, SwTableBoxFormat*,
SwTextFormatColl*, const SfxItemSet*, sal_uInt16, sal_uInt16)’:
sw/source/core/docnode/ndtbl.cxx:301:17: note: ‘aEndIdx’ declared here
301 | SwNodeIndex aEndIdx( *this, nIdxPos );
| ^~~~~~~
sw/source/core/docnode/ndtbl.cxx:301:17: note: ‘<unknown>’ declared here
Change-Id: I3f24cd8e3e0b1fd0a0943150d3d83d09f2c984fc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134741
Tested-by: Jenkins
Reviewed-by: Michael Stahl <[email protected]>
(cherry picked from commit 486991b8ec2b63324c8cf5a26e9091942c24b3d9)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134774
Reviewed-by: Thorsten Behrens <[email protected]>
diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx
index 7d03b0bcadaf..64201ac3e1b3 100644
--- a/sw/inc/ndindex.hxx
+++ b/sw/inc/ndindex.hxx
@@ -36,7 +36,16 @@ class SW_DLLPUBLIC SwNodeIndex final : public
sw::Ring<SwNodeIndex>
void RegisterIndex( SwNodes& rNodes )
{
if(!rNodes.m_vIndices)
+ {
+#if defined(__GNUC__) && __GNUC__ == 12
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdangling-pointer"
+#endif
rNodes.m_vIndices = this;
+#if defined(__GNUC__) && __GNUC__ == 12
+#pragma GCC diagnostic pop
+#endif
+ }
MoveTo(rNodes.m_vIndices);
}
void DeRegisterIndex( SwNodes& rNodes )