[Libreoffice-commits] core.git: The -fvisibility-ms-compat hack is no longer needed for UBSan on Linux...

Stephan Bergmann sbergman at redhat.com
Fri May 3 11:58:02 UTC 2019


This is a heads up for anybody using Clang ASan/UBSan on Linux:

(1)  If you are using Clang trunk (towards Clang 9), make sure you have 
<https://github.com/llvm/llvm-project/commit/5745eccef54ddd3caca278d1d292a88b2281528b> 
"Adapt -fsanitize=function to SANITIZER_NON_UNIQUE_TYPEINFO".  Configure 
now assumes that "Clang >= 9" implies that fix, and otherwise building 
or running LO could fail.

(2)  I want to eventually get rid of the legacy 
NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY code, so if you are using an 
older Clang, it would be great if you could upgrade as soon as 
convenient for you (and once Clang 9 is even out).


On 03/05/2019 13:47, Stephan Bergmann (via logerrit) wrote:
> New commits:
> commit 9a7aa3326d087c79879e435179e359dd76aa5e0a
> Author:     Stephan Bergmann <sbergman at redhat.com>
> AuthorDate: Tue Apr 16 16:11:39 2019 +0200
> Commit:     Stephan Bergmann <sbergman at redhat.com>
> CommitDate: Fri May 3 13:46:25 2019 +0200
> 
>      The -fvisibility-ms-compat hack is no longer needed for UBSan on Linux...
>      
>      ...with latest Clang trunk towards Clang 9.  All the no-longer necessary hacks
>      are made conditional on new NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY, which is
>      still set for UBSan builds with older Clang on Linux (but which should
>      eventually be purged).
>      
>      Various classes needed additional SAL_DLLPUBLIC_RTTI annotations, as building
>      with UBSan instrumentation can generate references to RTTI symbols from
>      additional places like outside a dynamic library that used to hide those symbols
>      by default (but used to not hide them for old UBSan builds thanks to the
>      -fvisibility-ms-compat hack).
>      
>      The odr-violation suppressions in solenv/sanitizers/asan-suppressions (which is
>      not referenced from anywhere in the code base, but meant to be included in an
>      ASan/UBSan build's ASAN_OPTIONS env var) are also no longer needed when
>      NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY is false.
>      
>      Change-Id: I24ec3e388b0cbab50dbe2bf008d9569bff7bf25a
>      Reviewed-on: https://gerrit.libreoffice.org/70829
>      Tested-by: Jenkins
>      Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
> 
> diff --git a/config_host.mk.in b/config_host.mk.in
> index eccc3ef1924f..66cca894d96c 100644
> --- a/config_host.mk.in
> +++ b/config_host.mk.in
> @@ -410,6 +410,7 @@ export MWAW_LIBS=$(gb_SPACE)@MWAW_LIBS@
>   export MYTHES_CFLAGS=$(gb_SPACE)@MYTHES_CFLAGS@
>   export MYTHES_LIBS=$(gb_SPACE)@MYTHES_LIBS@
>   export NASM=@NASM@
> +export NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY=@NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY@
>   export NEON_CFLAGS=$(gb_SPACE)@NEON_CFLAGS@
>   export NEON_LIBS=$(gb_SPACE)@NEON_LIBS@
>   export NEON_VERSION=@NEON_VERSION@
> diff --git a/configure.ac b/configure.ac
> index 9d010de28280..36e0c359dedf 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -3864,6 +3864,28 @@ else
>   fi
>   AC_SUBST(ENABLE_DEBUG)
>   
> +AC_MSG_CHECKING([whether special RTTI visibility flags are needed for Clang Linux UBSan])
> +NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY=
> +dnl Clang 9 is known fixed since
> +dnl <https://github.com/llvm/llvm-project/commit/5745eccef54ddd3caca278d1d292a88b2281528b> "Adapt
> +dnl -fsanitize=function to SANITIZER_NON_UNIQUE_TYPEINFO":
> +if test "$COM_IS_CLANG" = TRUE && test "$CLANGVER" -lt 90000 && test "$_os" = Linux; then
> +    for i in $CC; do
> +        case $i in
> +        -fsanitize=*)
> +            NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY=TRUE
> +            break
> +            ;;
> +        esac
> +    done
> +fi
> +if test "$NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY" = TRUE; then
> +    AC_MSG_RESULT([yes])
> +else
> +    AC_MSG_RESULT([no])
> +fi
> +AC_SUBST([NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY])
> +
>   dnl ===================================================================
>   dnl Select the linker to use (gold/lld/ld.bfd).
>   dnl This is done only after compiler checks (need to know if Clang is
> @@ -3889,17 +3911,8 @@ printf ("hello world\n");
>           AC_MSG_RESULT( yes )
>           use_ld_ok=yes
>           dnl For obscure reasons, unxgcc.mk uses the --dynamic-list-cpp-typeinfo linker option
> -        dnl if sanitizers are used, and lld doesn't support this option.
> -        use_ld_has_sanitizers=
> -        for i in $CC; do
> -            case $i in
> -            -fsanitize=*)
> -                use_ld_has_sanitizers=yes
> -                break
> -                ;;
> -            esac
> -        done
> -        if test -n "$use_ld_has_sanitizers"; then
> +        dnl if NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY, and lld doesn't support this option.
> +        if test -n "$NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY"; then
>               AC_MSG_CHECKING([for --dynamic-list-cpp-typeinfo linker support (-fuse-ld=$use_ld)])
>               use_ld_ldflags_save_2="$LDFLAGS"
>               LDFLAGS="$LDFLAGS -Wl,--dynamic-list-cpp-typeinfo"
> diff --git a/external/libabw/UnpackedTarball_libabw.mk b/external/libabw/UnpackedTarball_libabw.mk
> index 27195d3a0ab3..212abfbc4674 100644
> --- a/external/libabw/UnpackedTarball_libabw.mk
> +++ b/external/libabw/UnpackedTarball_libabw.mk
> @@ -19,12 +19,10 @@ $(eval $(call gb_UnpackedTarball_add_patches,libabw, \
>       external/libabw/libabw-msvc.patch.1 \
>   ))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libabw, \
>       external/libabw/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   # vim: set noet sw=4 ts=4:
> diff --git a/external/libcdr/UnpackedTarball_libcdr.mk b/external/libcdr/UnpackedTarball_libcdr.mk
> index 23874f7d01b5..7433d2bb4e67 100644
> --- a/external/libcdr/UnpackedTarball_libcdr.mk
> +++ b/external/libcdr/UnpackedTarball_libcdr.mk
> @@ -19,12 +19,10 @@ $(eval $(call gb_UnpackedTarball_add_patches,libcdr, \
>       external/libcdr/libcdr-visibility-win.patch \
>   ))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libcdr, \
>       external/libcdr/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   # vim: set noet sw=4 ts=4:
> diff --git a/external/libebook/UnpackedTarball_libebook.mk b/external/libebook/UnpackedTarball_libebook.mk
> index af2ddea28ae1..17b1a892dc3e 100644
> --- a/external/libebook/UnpackedTarball_libebook.mk
> +++ b/external/libebook/UnpackedTarball_libebook.mk
> @@ -15,12 +15,10 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libebook,0))
>   
>   $(eval $(call gb_UnpackedTarball_update_autoconf_configs,libebook))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libebook, \
>       external/libebook/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   # vim: set noet sw=4 ts=4:
> diff --git a/external/libepubgen/UnpackedTarball_libepubgen.mk b/external/libepubgen/UnpackedTarball_libepubgen.mk
> index 7553e825284f..051cc29021cc 100644
> --- a/external/libepubgen/UnpackedTarball_libepubgen.mk
> +++ b/external/libepubgen/UnpackedTarball_libepubgen.mk
> @@ -10,11 +10,9 @@
>   epubgen_patches :=
>   epubgen_patches += tdf-120491.patch
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   epubgen_patches += ubsan-visibility.patch
>   endif
> -endif
>   
>   $(eval $(call gb_UnpackedTarball_UnpackedTarball,libepubgen))
>   
> diff --git a/external/libetonyek/UnpackedTarball_libetonyek.mk b/external/libetonyek/UnpackedTarball_libetonyek.mk
> index 81685831fb60..01aac83c812a 100644
> --- a/external/libetonyek/UnpackedTarball_libetonyek.mk
> +++ b/external/libetonyek/UnpackedTarball_libetonyek.mk
> @@ -32,12 +32,10 @@ endif
>   endif
>   endif
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libetonyek, \
>       external/libetonyek/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   # vim: set noet sw=4 ts=4:
> diff --git a/external/libfreehand/UnpackedTarball_libfreehand.mk b/external/libfreehand/UnpackedTarball_libfreehand.mk
> index 3d4a3d522687..0853d0420129 100644
> --- a/external/libfreehand/UnpackedTarball_libfreehand.mk
> +++ b/external/libfreehand/UnpackedTarball_libfreehand.mk
> @@ -15,12 +15,10 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libfreehand,0))
>   
>   $(eval $(call gb_UnpackedTarball_update_autoconf_configs,libfreehand))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libfreehand, \
>       external/libfreehand/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   # vim: set noet sw=4 ts=4:
> diff --git a/external/libmspub/UnpackedTarball_libmspub.mk b/external/libmspub/UnpackedTarball_libmspub.mk
> index 5e5bedb27d83..f337d402d47f 100644
> --- a/external/libmspub/UnpackedTarball_libmspub.mk
> +++ b/external/libmspub/UnpackedTarball_libmspub.mk
> @@ -25,12 +25,10 @@ $(eval $(call gb_UnpackedTarball_add_patches,libmspub, \
>   ))
>   endif
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libmspub, \
>       external/libmspub/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   # vim: set noet sw=4 ts=4:
> diff --git a/external/libmwaw/UnpackedTarball_libmwaw.mk b/external/libmwaw/UnpackedTarball_libmwaw.mk
> index cd1551a1fe97..62357c008071 100644
> --- a/external/libmwaw/UnpackedTarball_libmwaw.mk
> +++ b/external/libmwaw/UnpackedTarball_libmwaw.mk
> @@ -15,13 +15,11 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libmwaw,0))
>   
>   $(eval $(call gb_UnpackedTarball_update_autoconf_configs,libmwaw))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libmwaw, \
>       external/libmwaw/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   ifneq ($(OS),MACOSX)
>   ifneq ($(OS),WNT)
> diff --git a/external/libodfgen/UnpackedTarball_libodfgen.mk b/external/libodfgen/UnpackedTarball_libodfgen.mk
> index 10eb24fd77a7..80ccbf73bfd5 100644
> --- a/external/libodfgen/UnpackedTarball_libodfgen.mk
> +++ b/external/libodfgen/UnpackedTarball_libodfgen.mk
> @@ -15,13 +15,11 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libodfgen,0))
>   
>   $(eval $(call gb_UnpackedTarball_update_autoconf_configs,libodfgen))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libodfgen, \
>       external/libodfgen/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   ifeq ($(SYSTEM_REVENGE),)
>   $(eval $(call gb_UnpackedTarball_add_patches,libodfgen, \
> diff --git a/external/libpagemaker/UnpackedTarball_libpagemaker.mk b/external/libpagemaker/UnpackedTarball_libpagemaker.mk
> index 2de27d5abbfd..a090d334c3fe 100644
> --- a/external/libpagemaker/UnpackedTarball_libpagemaker.mk
> +++ b/external/libpagemaker/UnpackedTarball_libpagemaker.mk
> @@ -15,12 +15,10 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libpagemaker,0))
>   
>   $(eval $(call gb_UnpackedTarball_update_autoconf_configs,libpagemaker))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libpagemaker, \
>       external/libpagemaker/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   # vim: set noet sw=4 ts=4:
> diff --git a/external/libqxp/UnpackedTarball_libqxp.mk b/external/libqxp/UnpackedTarball_libqxp.mk
> index 8519e983d957..c0d89263a4d2 100644
> --- a/external/libqxp/UnpackedTarball_libqxp.mk
> +++ b/external/libqxp/UnpackedTarball_libqxp.mk
> @@ -15,13 +15,11 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libqxp,0))
>   
>   $(eval $(call gb_UnpackedTarball_update_autoconf_configs,libqxp))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libqxp, \
>       external/libqxp/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   $(eval $(call gb_UnpackedTarball_add_patches,libqxp, \
>   	external/libqxp/android-workaround.patch.1 \
> diff --git a/external/librevenge/UnpackedTarball_librevenge.mk b/external/librevenge/UnpackedTarball_librevenge.mk
> index 678da6454586..7e4c48f59619 100644
> --- a/external/librevenge/UnpackedTarball_librevenge.mk
> +++ b/external/librevenge/UnpackedTarball_librevenge.mk
> @@ -19,13 +19,11 @@ $(eval $(call gb_UnpackedTarball_add_patches,librevenge, \
>       external/librevenge/rpath.patch \
>   ))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,librevenge, \
>       external/librevenge/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   ifneq ($(OS),MACOSX)
>   ifneq ($(OS),WNT)
> diff --git a/external/libstaroffice/UnpackedTarball_libstaroffice.mk b/external/libstaroffice/UnpackedTarball_libstaroffice.mk
> index fdf668d196dc..98b8e14cdaec 100644
> --- a/external/libstaroffice/UnpackedTarball_libstaroffice.mk
> +++ b/external/libstaroffice/UnpackedTarball_libstaroffice.mk
> @@ -15,13 +15,11 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libstaroffice,0))
>   
>   $(eval $(call gb_UnpackedTarball_update_autoconf_configs,libstaroffice))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libstaroffice, \
>       external/libstaroffice/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   ifneq ($(OS),MACOSX)
>   ifneq ($(OS),WNT)
> diff --git a/external/libvisio/UnpackedTarball_libvisio.mk b/external/libvisio/UnpackedTarball_libvisio.mk
> index 1ab8b392c4e8..0ff189261f42 100644
> --- a/external/libvisio/UnpackedTarball_libvisio.mk
> +++ b/external/libvisio/UnpackedTarball_libvisio.mk
> @@ -20,12 +20,10 @@ $(eval $(call gb_UnpackedTarball_add_patches,libvisio, \
>       external/libvisio/0001-fix-debug-build.patch.1 \
>   ))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libvisio, \
>       external/libvisio/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   # vim: set noet sw=4 ts=4:
> diff --git a/external/libwps/UnpackedTarball_libwps.mk b/external/libwps/UnpackedTarball_libwps.mk
> index d712f25406bd..b148db2f93d2 100644
> --- a/external/libwps/UnpackedTarball_libwps.mk
> +++ b/external/libwps/UnpackedTarball_libwps.mk
> @@ -27,12 +27,10 @@ $(eval $(call gb_UnpackedTarball_add_patches,libwps,\
>   endif
>   endif
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libwps, \
>       external/libwps/ubsan-visibility.patch.0 \
>   ))
>   endif
> -endif
>   
>   # vim: set noet sw=4 ts=4:
> diff --git a/external/libzmf/UnpackedTarball_libzmf.mk b/external/libzmf/UnpackedTarball_libzmf.mk
> index 3aafc660e9d5..5d5e7066572d 100644
> --- a/external/libzmf/UnpackedTarball_libzmf.mk
> +++ b/external/libzmf/UnpackedTarball_libzmf.mk
> @@ -15,13 +15,11 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libzmf,0))
>   
>   $(eval $(call gb_UnpackedTarball_update_autoconf_configs,libzmf))
>   
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   $(eval $(call gb_UnpackedTarball_add_patches,libzmf, \
>       external/libzmf/ubsan-visibility.patch \
>   ))
>   endif
> -endif
>   
>   $(eval $(call gb_UnpackedTarball_add_patches,libzmf, \
>       external/libzmf/android-workaround.patch.1 \
> diff --git a/include/oox/vml/vmlshape.hxx b/include/oox/vml/vmlshape.hxx
> index 2bab907e884f..cb60a13c6356 100644
> --- a/include/oox/vml/vmlshape.hxx
> +++ b/include/oox/vml/vmlshape.hxx
> @@ -122,7 +122,7 @@ struct OOX_DLLPUBLIC ShapeTypeModel
>   
>   /** A shape template contains all formatting properties of shapes and can serve
>       as templates for several shapes in a drawing. */
> -class ShapeType
> +class SAL_DLLPUBLIC_RTTI ShapeType
>   {
>   public:
>       explicit            ShapeType( Drawing& rDrawing );
> diff --git a/include/svx/AccessibleControlShape.hxx b/include/svx/AccessibleControlShape.hxx
> index 5b0e49941741..8c8115d9d748 100644
> --- a/include/svx/AccessibleControlShape.hxx
> +++ b/include/svx/AccessibleControlShape.hxx
> @@ -66,7 +66,7 @@ namespace accessibility {
>                                   >   AccessibleControlShape_Base;
>   /** @descr
>   */
> -class AccessibleControlShape final
> +class SAL_DLLPUBLIC_RTTI AccessibleControlShape final
>           :public AccessibleShape
>           ,public AccessibleControlShape_Base
>   {
> diff --git a/include/svx/EnhancedCustomShapeFunctionParser.hxx b/include/svx/EnhancedCustomShapeFunctionParser.hxx
> index 30873c5eb644..ff53f38c6bff 100644
> --- a/include/svx/EnhancedCustomShapeFunctionParser.hxx
> +++ b/include/svx/EnhancedCustomShapeFunctionParser.hxx
> @@ -134,7 +134,7 @@ inline std::basic_ostream<charT, traits> & operator <<(
>   
>   SVX_DLLPUBLIC void FillEquationParameter( const css::drawing::EnhancedCustomShapeParameter&, const sal_Int32, EnhancedCustomShapeEquation& );
>   
> -class ExpressionNode
> +class SAL_DLLPUBLIC_RTTI ExpressionNode
>   {
>   public:
>       virtual ~ExpressionNode();
> diff --git a/include/svx/gridctrl.hxx b/include/svx/gridctrl.hxx
> index fecb365b34ec..60f39a39198c 100644
> --- a/include/svx/gridctrl.hxx
> +++ b/include/svx/gridctrl.hxx
> @@ -63,7 +63,7 @@ enum class GridRowStatus
>   // DbGridRow, description of rows
>   
>   
> -class DbGridRow : public SvRefBase
> +class SAL_DLLPUBLIC_RTTI DbGridRow : public SvRefBase
>   {
>       css::uno::Any  m_aBookmark;        // Bookmark of the row, can be set
>       ::std::vector< std::unique_ptr<::svxform::DataColumn> >
> diff --git a/include/toolkit/awt/vclxwindows.hxx b/include/toolkit/awt/vclxwindows.hxx
> index 025238ecedbe..202d5974c8f9 100644
> --- a/include/toolkit/awt/vclxwindows.hxx
> +++ b/include/toolkit/awt/vclxwindows.hxx
> @@ -175,7 +175,7 @@ protected:
>   
>   //  class VCLXCheckBox
>   
> -class VCLXCheckBox :    public css::awt::XCheckBox,
> +class SAL_DLLPUBLIC_RTTI VCLXCheckBox :    public css::awt::XCheckBox,
>                           public css::awt::XButton,
>                           public VCLXGraphicControl
>   {
> @@ -233,7 +233,7 @@ public:
>   
>   //  class VCLXRadioButton
>   
> -class VCLXRadioButton : public css::awt::XRadioButton,
> +class SAL_DLLPUBLIC_RTTI VCLXRadioButton : public css::awt::XRadioButton,
>                           public css::awt::XButton,
>                           public VCLXGraphicControl
>   {
> @@ -562,7 +562,7 @@ public:
>   
>   //  class VCLXScrollBar
>   
> -class VCLXScrollBar :   public css::awt::XScrollBar,
> +class SAL_DLLPUBLIC_RTTI VCLXScrollBar :   public css::awt::XScrollBar,
>                           public VCLXWindow
>   {
>   private:
> @@ -874,7 +874,7 @@ public:
>   
>   //  class VCLXFormattedSpinField
>   
> -class VCLXFormattedSpinField : public VCLXSpinField
> +class SAL_DLLPUBLIC_RTTI VCLXFormattedSpinField : public VCLXSpinField
>   {
>   private:
>       FormatterBase*  mpFormatter;
> diff --git a/include/xmloff/NamedBoolPropertyHdl.hxx b/include/xmloff/NamedBoolPropertyHdl.hxx
> index d5fe6eb83927..1a5609c4042e 100644
> --- a/include/xmloff/NamedBoolPropertyHdl.hxx
> +++ b/include/xmloff/NamedBoolPropertyHdl.hxx
> @@ -26,7 +26,7 @@
>   /**
>       PropertyHandler for a named xml bool type:
>   */
> -class XMLNamedBoolPropertyHdl : public XMLPropertyHandler
> +class SAL_DLLPUBLIC_RTTI XMLNamedBoolPropertyHdl : public XMLPropertyHandler
>   {
>   private:
>       const OUString maTrueStr;
> diff --git a/include/xmloff/controlpropertyhdl.hxx b/include/xmloff/controlpropertyhdl.hxx
> index 141111816dad..51f95986af0d 100644
> --- a/include/xmloff/controlpropertyhdl.hxx
> +++ b/include/xmloff/controlpropertyhdl.hxx
> @@ -36,7 +36,7 @@ namespace xmloff
>   
>       //= ORotationAngleHandler
>   
> -    class ORotationAngleHandler : public XMLPropertyHandler
> +    class SAL_DLLPUBLIC_RTTI ORotationAngleHandler : public XMLPropertyHandler
>       {
>       public:
>           ORotationAngleHandler();
> @@ -48,7 +48,7 @@ namespace xmloff
>   
>       //= OFontWidthHandler
>   
> -    class OFontWidthHandler : public XMLPropertyHandler
> +    class SAL_DLLPUBLIC_RTTI OFontWidthHandler : public XMLPropertyHandler
>       {
>       public:
>           OFontWidthHandler();
> @@ -60,7 +60,7 @@ namespace xmloff
>   
>       //= OControlBorderHandlerBase
>   
> -    class OControlBorderHandler : public XMLPropertyHandler
> +    class SAL_DLLPUBLIC_RTTI OControlBorderHandler : public XMLPropertyHandler
>       {
>       public:
>           enum BorderFacet
> diff --git a/sc/inc/chgtrack.hxx b/sc/inc/chgtrack.hxx
> index 65f049ad163f..fa18d418dfc6 100644
> --- a/sc/inc/chgtrack.hxx
> +++ b/sc/inc/chgtrack.hxx
> @@ -174,7 +174,7 @@ public:
>   // this is only for the XML Export in the hxx
>   class ScChangeActionContent;
>   
> -class ScChangeAction
> +class SAL_DLLPUBLIC_RTTI ScChangeAction
>   {
>       friend class ScChangeTrack;
>       friend class ScChangeActionIns;
> @@ -363,7 +363,7 @@ public:
>   };
>   
>   //  ScChangeActionIns
> -class ScChangeActionIns : public ScChangeAction
> +class SAL_DLLPUBLIC_RTTI ScChangeActionIns : public ScChangeAction
>   {
>       friend class ScChangeTrack;
>   
> @@ -398,7 +398,7 @@ public:
>   };
>   
>   //  ScChangeActionDel
> -class ScChangeActionMove;
> +class SAL_DLLPUBLIC_RTTI ScChangeActionMove;
>   
>   class ScChangeActionDelMoveEntry : public ScChangeActionLinkEntry
>   {
> @@ -597,7 +597,7 @@ enum ScChangeActionContentCellType
>       SC_CACCT_MATREF
>   };
>   
> -class ScChangeActionContent : public ScChangeAction
> +class SAL_DLLPUBLIC_RTTI ScChangeActionContent : public ScChangeAction
>   {
>       friend class ScChangeTrack;
>   
> @@ -817,7 +817,7 @@ enum ScChangeTrackMergeState
>   // and are decremented, to keep values in a table separated from "normal" actions.
>   #define SC_CHGTRACK_GENERATED_START (sal_uInt32(0xfffffff0))
>   
> -class ScChangeTrack : public utl::ConfigurationListener
> +class SAL_DLLPUBLIC_RTTI ScChangeTrack : public utl::ConfigurationListener
>   {
>       friend void ScChangeAction::RejectRestoreContents( ScChangeTrack*, SCCOL, SCROW );
>       friend bool ScChangeActionDel::Reject( ScDocument* pDoc );
> diff --git a/sc/inc/dapiuno.hxx b/sc/inc/dapiuno.hxx
> index 872745086d98..ad6f9b275502 100644
> --- a/sc/inc/dapiuno.hxx
> +++ b/sc/inc/dapiuno.hxx
> @@ -128,7 +128,7 @@ public:
>   };
>   
>   //  ScDataPilotDescriptorBase is never instantiated directly
> -class ScDataPilotDescriptorBase : public css::sheet::XDataPilotDescriptor,
> +class SAL_DLLPUBLIC_RTTI ScDataPilotDescriptorBase : public css::sheet::XDataPilotDescriptor,
>                                     public css::beans::XPropertySet,
>                                     public css::sheet::XDataPilotDataLayoutFieldSupplier,
>                                     public css::lang::XServiceInfo,
> diff --git a/sc/inc/dbdata.hxx b/sc/inc/dbdata.hxx
> index 9a260b4e8390..7fd60a530b66 100644
> --- a/sc/inc/dbdata.hxx
> +++ b/sc/inc/dbdata.hxx
> @@ -58,7 +58,7 @@ protected:
>       ScRangeList maDirtyTableColumnNames;
>   };
>   
> -class ScDBData : public SvtListener, public ScRefreshTimer
> +class SAL_DLLPUBLIC_RTTI ScDBData : public SvtListener, public ScRefreshTimer
>   {
>   private:
>       std::unique_ptr<ScSortParam> mpSortParam;
> diff --git a/sc/inc/queryparam.hxx b/sc/inc/queryparam.hxx
> index 594b21d56057..b06496547d7e 100644
> --- a/sc/inc/queryparam.hxx
> +++ b/sc/inc/queryparam.hxx
> @@ -39,7 +39,7 @@ class SharedStringPool;
>   
>   }
>   
> -struct ScQueryParamBase
> +struct SAL_DLLPUBLIC_RTTI ScQueryParamBase
>   {
>       utl::SearchParam::SearchType eSearchType;
>       bool            bHasHeader;
> @@ -99,7 +99,7 @@ inline std::basic_ostream<charT, traits> & operator <<(std::basic_ostream<charT,
>       return stream;
>   }
>   
> -struct ScQueryParamTable
> +struct SAL_DLLPUBLIC_RTTI ScQueryParamTable
>   {
>       SCCOL           nCol1;
>       SCROW           nRow1;
> diff --git a/sc/inc/scmod.hxx b/sc/inc/scmod.hxx
> index 2c517eedf770..7d0d7e0a3675 100644
> --- a/sc/inc/scmod.hxx
> +++ b/sc/inc/scmod.hxx
> @@ -77,7 +77,7 @@ class ScMarkData;
>   struct ScDragData;
>   class SfxDialogController;
>   
> -class ScModule: public SfxModule, public SfxListener, public utl::ConfigurationListener
> +class SAL_DLLPUBLIC_RTTI ScModule: public SfxModule, public SfxListener, public utl::ConfigurationListener
>   {
>       Timer               m_aIdleTimer;
>       Idle                m_aSpellIdle;
> diff --git a/sc/inc/stlsheet.hxx b/sc/inc/stlsheet.hxx
> index bd5aa843d8b4..69bc83be6365 100644
> --- a/sc/inc/stlsheet.hxx
> +++ b/sc/inc/stlsheet.hxx
> @@ -26,7 +26,7 @@
>   
>   class ScStyleSheetPool;
>   
> -class ScStyleSheet final : public SfxStyleSheet
> +class SAL_DLLPUBLIC_RTTI ScStyleSheet final : public SfxStyleSheet
>   {
>   friend class ScStyleSheetPool;
>   
> diff --git a/sc/inc/userdat.hxx b/sc/inc/userdat.hxx
> index 56874721f0f1..17a81261b3cd 100644
> --- a/sc/inc/userdat.hxx
> +++ b/sc/inc/userdat.hxx
> @@ -82,7 +82,7 @@ public:
>       const ImageMap& GetImageMap() const             { return aImageMap; }
>   };
>   
> -class ScMacroInfo : public SdrObjUserData
> +class SAL_DLLPUBLIC_RTTI ScMacroInfo : public SdrObjUserData
>   {
>   public:
>                       ScMacroInfo();
> diff --git a/sc/source/ui/inc/dbfunc.hxx b/sc/source/ui/inc/dbfunc.hxx
> index 7e807d9a5ad0..e4db4d500cb0 100644
> --- a/sc/source/ui/inc/dbfunc.hxx
> +++ b/sc/source/ui/inc/dbfunc.hxx
> @@ -35,7 +35,7 @@ class ScDPSaveData;
>   struct ScDPNumGroupInfo;
>   struct ScSubTotalParam;
>   
> -class ScDBFunc : public ScViewFunc
> +class SAL_DLLPUBLIC_RTTI ScDBFunc : public ScViewFunc
>   {
>   private:
>       void GetSelectedMemberList(ScDPUniqueStringSet& rEntries, long& rDimension);
> diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx
> index ca2a4ce8308d..cdbd9b83f7a0 100644
> --- a/sc/source/ui/inc/gridwin.hxx
> +++ b/sc/source/ui/inc/gridwin.hxx
> @@ -82,7 +82,7 @@ struct SpellCallbackInfo;
>   // predefines
>   namespace sdr { namespace overlay { class OverlayObjectList; }}
>   
> -class ScGridWindow : public vcl::Window, public DropTargetHelper, public DragSourceHelper
> +class SAL_DLLPUBLIC_RTTI ScGridWindow : public vcl::Window, public DropTargetHelper, public DragSourceHelper
>   {
>       // ScFilterListBox is always used for selection list
>       friend class ScFilterListBox;
> diff --git a/sc/source/ui/inc/preview.hxx b/sc/source/ui/inc/preview.hxx
> index f3595722398c..69133b9e9c1b 100644
> --- a/sc/source/ui/inc/preview.hxx
> +++ b/sc/source/ui/inc/preview.hxx
> @@ -29,7 +29,7 @@ class ScDocShell;
>   class ScPreviewShell;
>   class FmFormView;
>   
> -class ScPreview : public vcl::Window
> +class SAL_DLLPUBLIC_RTTI ScPreview : public vcl::Window
>   {
>   private:
>       ScMarkData::MarkedTabsType maSelectedTabs;
> diff --git a/sc/source/ui/inc/transobj.hxx b/sc/source/ui/inc/transobj.hxx
> index 211fa8fc7ef2..5b7f405fb55e 100644
> --- a/sc/source/ui/inc/transobj.hxx
> +++ b/sc/source/ui/inc/transobj.hxx
> @@ -36,7 +36,7 @@ namespace com { namespace sun { namespace star {
>       }
>   }}}
>   
> -class ScTransferObj : public TransferableHelper
> +class SAL_DLLPUBLIC_RTTI ScTransferObj : public TransferableHelper
>   {
>   private:
>       ScDocumentUniquePtr             m_pDoc;
> diff --git a/sd/inc/CustomAnimationEffect.hxx b/sd/inc/CustomAnimationEffect.hxx
> index d27a4c13efcb..f60e350ba3cf 100644
> --- a/sd/inc/CustomAnimationEffect.hxx
> +++ b/sd/inc/CustomAnimationEffect.hxx
> @@ -365,7 +365,7 @@ private:
>   typedef std::shared_ptr< InteractiveSequence > InteractiveSequencePtr;
>   typedef std::vector< InteractiveSequencePtr > InteractiveSequenceVector;
>   
> -class MainSequence : public EffectSequenceHelper, public ISequenceListener
> +class SAL_DLLPUBLIC_RTTI MainSequence : public EffectSequenceHelper, public ISequenceListener
>   {
>       friend class UndoAnimation;
>       friend class MainSequenceRebuildGuard;
> diff --git a/sd/inc/sdmod.hxx b/sd/inc/sdmod.hxx
> index 65d9cdedf4e7..8fedd75ae242 100644
> --- a/sd/inc/sdmod.hxx
> +++ b/sd/inc/sdmod.hxx
> @@ -69,7 +69,7 @@ typedef std::map< sal_uInt32, css::uno::Sequence< css::uno::Type> > SdTypesCache
>   
>   */
>   
> -class SdModule final : public SfxModule, public SfxListener
> +class SAL_DLLPUBLIC_RTTI SdModule final : public SfxModule, public SfxListener
>   {
>   public:
>                               SFX_DECL_INTERFACE(SD_IF_SDAPP)
> diff --git a/sd/inc/stlpool.hxx b/sd/inc/stlpool.hxx
> index f4cf930d26e3..d1fd4505fc80 100644
> --- a/sd/inc/stlpool.hxx
> +++ b/sd/inc/stlpool.hxx
> @@ -45,7 +45,7 @@ typedef ::cppu::ImplInheritanceHelper< SfxStyleSheetPool,
>                                           css::container::XNameAccess,
>                                           css::lang::XComponent > SdStyleSheetPoolBase;
>   
> -class SdStyleSheetPool final : public SdStyleSheetPoolBase, public SfxListener
> +class SAL_DLLPUBLIC_RTTI SdStyleSheetPool final : public SdStyleSheetPoolBase, public SfxListener
>   {
>       friend class SdDrawDocument;
>   public:
> diff --git a/sd/source/ui/inc/DrawViewShell.hxx b/sd/source/ui/inc/DrawViewShell.hxx
> index df5590cfebd3..713cac92c2fc 100644
> --- a/sd/source/ui/inc/DrawViewShell.hxx
> +++ b/sd/source/ui/inc/DrawViewShell.hxx
> @@ -65,7 +65,7 @@ class ViewOverlayManager;
>       overview over several slides or a textual
>       overview over the text in an Impress document (OutlineViewShell).
>   */
> -class DrawViewShell
> +class SAL_DLLPUBLIC_RTTI DrawViewShell
>       : public ViewShell,
>         public SfxListener,
>         public utl::ConfigurationListener
> diff --git a/sd/source/ui/inc/GraphicViewShell.hxx b/sd/source/ui/inc/GraphicViewShell.hxx
> index aea154e7059f..fd79bda658d7 100644
> --- a/sd/source/ui/inc/GraphicViewShell.hxx
> +++ b/sd/source/ui/inc/GraphicViewShell.hxx
> @@ -35,7 +35,7 @@ namespace sd {
>       ViewShell that turns off some of the features for GraphicViewShell
>       instances.</p>
>   */
> -class GraphicViewShell final
> +class SAL_DLLPUBLIC_RTTI GraphicViewShell final
>       : public DrawViewShell
>   {
>   public:
> diff --git a/sd/source/ui/inc/LayerTabBar.hxx b/sd/source/ui/inc/LayerTabBar.hxx
> index 3654f47026ce..2e0bee3aabef 100644
> --- a/sd/source/ui/inc/LayerTabBar.hxx
> +++ b/sd/source/ui/inc/LayerTabBar.hxx
> @@ -31,7 +31,7 @@ namespace sd {
>    */
>   class DrawViewShell;
>   
> -class LayerTabBar final
> +class SAL_DLLPUBLIC_RTTI LayerTabBar final
>       : public TabBar,
>         public DropTargetHelper
>   {
> diff --git a/sd/source/ui/inc/SlideSorterViewShell.hxx b/sd/source/ui/inc/SlideSorterViewShell.hxx
> index 196134a32974..43f94f4d60cd 100644
> --- a/sd/source/ui/inc/SlideSorterViewShell.hxx
> +++ b/sd/source/ui/inc/SlideSorterViewShell.hxx
> @@ -35,7 +35,7 @@ namespace sd { namespace slidesorter {
>   
>   class SlideSorter;
>   
> -class SlideSorterViewShell
> +class SAL_DLLPUBLIC_RTTI SlideSorterViewShell
>       : public ViewShell
>   {
>       friend class controller::SlotManager;
> diff --git a/sd/source/ui/inc/ViewShell.hxx b/sd/source/ui/inc/ViewShell.hxx
> index 8b7707504173..dea7dfbfea4c 100644
> --- a/sd/source/ui/inc/ViewShell.hxx
> +++ b/sd/source/ui/inc/ViewShell.hxx
> @@ -86,7 +86,7 @@ static const DrawModeFlags OUTPUT_DRAWMODE_CONTRAST
>   
>       <p>This class replaces the former ViewShell class.</p>
>   */
> -class ViewShell
> +class SAL_DLLPUBLIC_RTTI ViewShell
>       : public SfxShell
>   {
>   public:
> diff --git a/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx b/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx
> index a77de34d9f18..b79af210bfe5 100644
> --- a/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx
> +++ b/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx
> @@ -52,7 +52,7 @@ namespace sd { namespace slidesorter { namespace controller {
>   
>   class SlideSorterController;
>   
> -class Clipboard
> +class SAL_DLLPUBLIC_RTTI Clipboard
>       : public ViewClipboard
>   {
>   public:
> diff --git a/solenv/gbuild/platform/com_GCC_defs.mk b/solenv/gbuild/platform/com_GCC_defs.mk
> index 28bb7138d0d7..3946662d8f67 100644
> --- a/solenv/gbuild/platform/com_GCC_defs.mk
> +++ b/solenv/gbuild/platform/com_GCC_defs.mk
> @@ -121,11 +121,10 @@ endif
>   
>   # If CC or CXX already include -fvisibility=hidden, don't duplicate it
>   ifeq (,$(filter -fvisibility=hidden,$(CC)))
> -gb_VISIBILITY_FLAGS := -fvisibility=hidden
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   gb_VISIBILITY_FLAGS := -fvisibility-ms-compat
> -endif
> +else
> +gb_VISIBILITY_FLAGS := -fvisibility=hidden
>   endif
>   endif
>   gb_VISIBILITY_FLAGS_CXX := -fvisibility-inlines-hidden
> diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk
> index 0cd205891d2e..1d6b38cdf8ce 100644
> --- a/solenv/gbuild/platform/unxgcc.mk
> +++ b/solenv/gbuild/platform/unxgcc.mk
> @@ -84,12 +84,10 @@ endif
>   
>   ifneq ($(HAVE_LD_BSYMBOLIC_FUNCTIONS),)
>   gb_LinkTarget_LDFLAGS += -Wl,-Bsymbolic-functions
> -ifeq ($(COM_IS_CLANG),TRUE)
> -ifneq ($(filter -fsanitize=%,$(CC)),)
> +ifeq ($(NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY),TRUE)
>   gb_LinkTarget_LDFLAGS += -Wl,--dynamic-list-cpp-typeinfo
>   endif
>   endif
> -endif
>   
>   gb_LINKEROPTFLAGS := -Wl,-O1
>   gb_LINKERSTRIPDEBUGFLAGS := -Wl,-S
> diff --git a/sw/inc/AnnotationWin.hxx b/sw/inc/AnnotationWin.hxx
> index 5295c93f641e..e4c509641851 100644
> --- a/sw/inc/AnnotationWin.hxx
> +++ b/sw/inc/AnnotationWin.hxx
> @@ -56,7 +56,7 @@ namespace sw { namespace sidebarwindows {
>   
>   namespace sw { namespace annotation {
>   
> -class SwAnnotationWin : public vcl::Window
> +class SAL_DLLPUBLIC_RTTI SwAnnotationWin : public vcl::Window
>   {
>       public:
>           SwAnnotationWin( SwEditWin& rEditWin,
> diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx
> index b6f8242864f0..d34ae3f34b72 100644
> --- a/sw/inc/PostItMgr.hxx
> +++ b/sw/inc/PostItMgr.hxx
> @@ -124,7 +124,7 @@ class SwNoteProps: public utl::ConfigItem
>       virtual void Notify( const css::uno::Sequence< OUString >& aPropertyNames ) override;
>   };
>   
> -class SwPostItMgr: public SfxListener
> +class SAL_DLLPUBLIC_RTTI SwPostItMgr: public SfxListener
>   {
>       private:
>           SwView*                         mpView;
> diff --git a/sw/inc/authfld.hxx b/sw/inc/authfld.hxx
> index ea92f4289d9b..9a9ba06c13c1 100644
> --- a/sw/inc/authfld.hxx
> +++ b/sw/inc/authfld.hxx
> @@ -145,7 +145,7 @@ public:
>       one of the instances with the same m_nHandle is actually in the document,
>       they're all cloned via CopyField()...
>    */
> -class SwAuthorityField : public SwField
> +class SAL_DLLPUBLIC_RTTI SwAuthorityField : public SwField
>   {
>       rtl::Reference<SwAuthEntry>  m_xAuthEntry;
>       mutable sal_IntPtr  m_nTempSequencePos;
> diff --git a/sw/inc/dcontact.hxx b/sw/inc/dcontact.hxx
> index d19befc69a96..175b98de3231 100644
> --- a/sw/inc/dcontact.hxx
> +++ b/sw/inc/dcontact.hxx
> @@ -302,7 +302,7 @@ bool CheckControlLayer( const SdrObject *pObj );
>   
>   typedef std::unique_ptr< SwDrawVirtObj, SdrObjectFreeOp > SwDrawVirtObjPtr;
>   
> -class SwDrawContact final : public SwContact
> +class SAL_DLLPUBLIC_RTTI SwDrawContact final : public SwContact
>   {
>       private:
>           /** anchored drawing object instance for the
> diff --git a/sw/inc/docufld.hxx b/sw/inc/docufld.hxx
> index d6ff1692e5bf..bdd7fd68756f 100644
> --- a/sw/inc/docufld.hxx
> +++ b/sw/inc/docufld.hxx
> @@ -123,7 +123,7 @@ enum SwJumpEditFormat
>       JE_FMT_OLE
>   };
>   
> -class SwPageNumberFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwPageNumberFieldType : public SwFieldType
>   {
>       SvxNumType      m_nNumberingType;
>       bool            m_bVirtual;
> @@ -196,7 +196,7 @@ public:
>       virtual bool        PutValue( const css::uno::Any& rVal, sal_uInt16 nWhich ) override;
>   };
>   
> -class SwFileNameFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwFileNameFieldType : public SwFieldType
>   {
>       SwDoc *m_pDoc;
>   public:
> @@ -222,7 +222,7 @@ public:
>       virtual bool        PutValue( const css::uno::Any& rVal, sal_uInt16 nWhich ) override;
>   };
>   
> -class SwTemplNameFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwTemplNameFieldType : public SwFieldType
>   {
>       SwDoc *m_pDoc;
>   public:
> @@ -244,7 +244,7 @@ public:
>   };
>   
>   // Document statistics
> -class SwDocStatFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwDocStatFieldType : public SwFieldType
>   {
>       SwDoc*          m_pDoc;
>       SvxNumType      m_nNumberingType;
> @@ -276,7 +276,7 @@ public:
>       virtual bool        PutValue( const css::uno::Any& rVal, sal_uInt16 nWhich ) override;
>   };
>   
> -class SwHiddenTextFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwHiddenTextFieldType : public SwFieldType
>   {
>       bool m_bHidden;
>   public:
> @@ -375,7 +375,7 @@ public:
>       virtual bool        PutValue( const css::uno::Any& rVal, sal_uInt16 nWhich ) override;
>   };
>   
> -class SwMacroFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwMacroFieldType : public SwFieldType
>   {
>       SwDoc* const m_pDoc;
>   
> @@ -423,7 +423,7 @@ public:
>       static bool isScriptURL( const OUString& str );
>   };
>   
> -class SwPostItFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwPostItFieldType : public SwFieldType
>   {
>   private:
>       SwDoc* const mpDoc;
> @@ -496,7 +496,7 @@ public:
>       virtual void dumpAsXml(xmlTextWriterPtr pWriter) const override;
>   };
>   
> -class SwDocInfoFieldType : public SwValueFieldType
> +class SAL_DLLPUBLIC_RTTI SwDocInfoFieldType : public SwValueFieldType
>   {
>   public:
>       SwDocInfoFieldType(SwDoc* pDc);
> @@ -573,7 +573,7 @@ protected:
>   };
>   
>   // Relative page numbering.
> -class SwRefPageSetField : public SwField
> +class SAL_DLLPUBLIC_RTTI SwRefPageSetField : public SwField
>   {
>       short   m_nOffset;
>       bool    m_bOn;
> @@ -680,7 +680,7 @@ public:
>       virtual std::unique_ptr<SwFieldType> Copy() const override;
>   };
>   
> -class SwScriptField : public SwField
> +class SAL_DLLPUBLIC_RTTI SwScriptField : public SwField
>   {
>       OUString m_sType;  ///< Type of Code (Java/VBScript/...)
>       OUString m_sCode;  /**< Code as text.
> @@ -711,7 +711,7 @@ public:
>   };
>   
>   // Combined Character Fieldtype
> -class SwCombinedCharFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwCombinedCharFieldType : public SwFieldType
>   {
>   public:
>       SwCombinedCharFieldType();
> diff --git a/sw/inc/expfld.hxx b/sw/inc/expfld.hxx
> index 23d00b3d9fbb..dcd1354619b3 100644
> --- a/sw/inc/expfld.hxx
> +++ b/sw/inc/expfld.hxx
> @@ -67,7 +67,7 @@ public:
>       void Clear() { maData.clear(); }
>   };
>   
> -class SwGetExpFieldType : public SwValueFieldType
> +class SAL_DLLPUBLIC_RTTI SwGetExpFieldType : public SwValueFieldType
>   {
>   public:
>       SwGetExpFieldType(SwDoc* pDoc);
> @@ -268,7 +268,7 @@ inline bool SwSetExpField::GetInputFlag() const
>   inline bool SwSetExpField::IsSequenceField() const
>       { return 0 != (nsSwGetSetExpType::GSE_SEQ & static_cast<SwSetExpFieldType*>(GetTyp())->GetType()); }
>   
> -class SwInputFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwInputFieldType : public SwFieldType
>   {
>       SwDoc* const mpDoc;
>   public:
> diff --git a/sw/inc/flddat.hxx b/sw/inc/flddat.hxx
> index 38ea963196b9..bdc7c93a2c10 100644
> --- a/sw/inc/flddat.hxx
> +++ b/sw/inc/flddat.hxx
> @@ -32,7 +32,7 @@ enum SwDateSubFormat
>       DATE_VAR
>   };
>   
> -class SwDateTimeFieldType : public SwValueFieldType
> +class SAL_DLLPUBLIC_RTTI SwDateTimeFieldType : public SwValueFieldType
>   {
>   public:
>           SwDateTimeFieldType(SwDoc* pDoc);
> diff --git a/sw/inc/flddropdown.hxx b/sw/inc/flddropdown.hxx
> index cc29a2e84c7f..2fbf8d0b6bb2 100644
> --- a/sw/inc/flddropdown.hxx
> +++ b/sw/inc/flddropdown.hxx
> @@ -28,7 +28,7 @@
>   /**
>       Field type for dropdown boxes.
>   */
> -class SwDropDownFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwDropDownFieldType : public SwFieldType
>   {
>   public:
>       /**
> diff --git a/sw/inc/fmtautofmt.hxx b/sw/inc/fmtautofmt.hxx
> index 76527f90ddfe..0863ca5e7c1b 100644
> --- a/sw/inc/fmtautofmt.hxx
> +++ b/sw/inc/fmtautofmt.hxx
> @@ -22,7 +22,7 @@
>   #include <svl/poolitem.hxx>
>   #include <memory>
>   
> -class SwFormatAutoFormat: public SfxPoolItem
> +class SAL_DLLPUBLIC_RTTI SwFormatAutoFormat: public SfxPoolItem
>   {
>       std::shared_ptr<SfxItemSet> mpHandle;
>   
> diff --git a/sw/inc/fmtflcnt.hxx b/sw/inc/fmtflcnt.hxx
> index 18ba66c2fb48..ffe143e434f6 100644
> --- a/sw/inc/fmtflcnt.hxx
> +++ b/sw/inc/fmtflcnt.hxx
> @@ -29,7 +29,7 @@ class SwTextFlyCnt;
>    *
>    * A pool item that is attached to the placeholder character of an as-character frame. (TextFrame, etc.)
>    */
> -class SwFormatFlyCnt : public SfxPoolItem
> +class SAL_DLLPUBLIC_RTTI SwFormatFlyCnt : public SfxPoolItem
>   {
>       friend class SwTextFlyCnt;
>       SwTextFlyCnt* m_pTextAttr;
> diff --git a/sw/inc/fmtrfmrk.hxx b/sw/inc/fmtrfmrk.hxx
> index b235961baf5b..0b10bfeb8ed6 100644
> --- a/sw/inc/fmtrfmrk.hxx
> +++ b/sw/inc/fmtrfmrk.hxx
> @@ -33,7 +33,7 @@ class SwTextRefMark;
>   
>   // ATT_REFMARK
>   
> -class SwFormatRefMark
> +class SAL_DLLPUBLIC_RTTI SwFormatRefMark
>       : public SfxPoolItem
>       , public SwModify
>       , public sw::BroadcasterMixin
> diff --git a/sw/inc/grfatr.hxx b/sw/inc/grfatr.hxx
> index 6cdd70b9a768..87db52a36ab9 100644
> --- a/sw/inc/grfatr.hxx
> +++ b/sw/inc/grfatr.hxx
> @@ -77,7 +77,7 @@ public:
>       virtual SfxPoolItem*        Clone( SfxItemPool *pPool = nullptr ) const override;
>   };
>   
> -class SwRotationGrf : public SfxUInt16Item
> +class SAL_DLLPUBLIC_RTTI SwRotationGrf : public SfxUInt16Item
>   {
>   private:
>       Size const aUnrotatedSize;
> diff --git a/sw/inc/modcfg.hxx b/sw/inc/modcfg.hxx
> index 795d1f382fdc..e7854ef8fb9f 100644
> --- a/sw/inc/modcfg.hxx
> +++ b/sw/inc/modcfg.hxx
> @@ -57,7 +57,7 @@ public:
>       void Insert(InsCaptionOpt* pObj);
>   };
>   
> -class SwRevisionConfig : public utl::ConfigItem
> +class SAL_DLLPUBLIC_RTTI SwRevisionConfig : public utl::ConfigItem
>   {
>       friend class SwModuleOptions;
>   
> @@ -90,7 +90,7 @@ enum class SwCompareMode
>       ByChar
>   };
>   
> -class SwCompareConfig : public utl::ConfigItem
> +class SAL_DLLPUBLIC_RTTI SwCompareConfig : public utl::ConfigItem
>   {
>       friend class SwModuleOptions;
>   
> @@ -114,7 +114,7 @@ public:
>       using ConfigItem::SetModified;
>   };
>   
> -class SwInsertConfig : public utl::ConfigItem
> +class SAL_DLLPUBLIC_RTTI SwInsertConfig : public utl::ConfigItem
>   {
>       friend class SwModuleOptions;
>   
> @@ -142,7 +142,7 @@ public:
>       using ConfigItem::SetModified;
>   };
>   
> -class SwTableConfig : public utl::ConfigItem
> +class SAL_DLLPUBLIC_RTTI SwTableConfig : public utl::ConfigItem
>   {
>       friend class SwModuleOptions;
>   
> @@ -170,7 +170,7 @@ public:
>       using ConfigItem::SetModified;
>   };
>   
> -class SwMiscConfig : public utl::ConfigItem
> +class SAL_DLLPUBLIC_RTTI SwMiscConfig : public utl::ConfigItem
>   {
>       friend class SwModuleOptions;
>   
> diff --git a/sw/inc/node.hxx b/sw/inc/node.hxx
> index 1b53254083de..d1e0f36fcae7 100644
> --- a/sw/inc/node.hxx
> +++ b/sw/inc/node.hxx
> @@ -520,7 +520,7 @@ private:
>       SwTableNode & operator= ( const SwTableNode & rNode ) = delete;
>   };
>   
> -class SwSectionNode
> +class SAL_DLLPUBLIC_RTTI SwSectionNode
>       : public SwStartNode
>   {
>       friend class SwNodes;
> diff --git a/sw/inc/reffld.hxx b/sw/inc/reffld.hxx
> index 4adf0becfc31..f2c61877b180 100644
> --- a/sw/inc/reffld.hxx
> +++ b/sw/inc/reffld.hxx
> @@ -60,7 +60,7 @@ enum REFERENCEMARK
>   
>   /// Get reference.
>   
> -class SwGetRefFieldType : public SwFieldType
> +class SAL_DLLPUBLIC_RTTI SwGetRefFieldType : public SwFieldType
>   {
>       SwDoc* m_pDoc;
>   protected:
> diff --git a/sw/inc/swatrset.hxx b/sw/inc/swatrset.hxx
> index d446dcddcc51..48cc2d6f0e20 100644
> --- a/sw/inc/swatrset.hxx
> +++ b/sw/inc/swatrset.hxx
> @@ -132,7 +132,7 @@ namespace vcl {
>       typedef OutputDevice RenderContext;
>   };
>   
> -class SwAttrPool : public SfxItemPool
> +class SAL_DLLPUBLIC_RTTI SwAttrPool : public SfxItemPool
>   {
>   private:
>       // helpers to add/rmove DrawingLayer ItemPool, used in constructor
> diff --git a/sw/inc/txtfld.hxx b/sw/inc/txtfld.hxx
> index 38ca9caa6251..0db27ba5818a 100644
> --- a/sw/inc/txtfld.hxx
> +++ b/sw/inc/txtfld.hxx
> @@ -28,7 +28,7 @@
>   class SwPaM;
>   class SwTextNode;
>   
> -class SwTextField : public virtual SwTextAttr
> +class SAL_DLLPUBLIC_RTTI SwTextField : public virtual SwTextAttr
>   {
>       mutable OUString m_aExpand; // only used to determine, if field content is changing in <ExpandTextField()>
>       SwTextNode * m_pTextNode;
> diff --git a/sw/inc/txttxmrk.hxx b/sw/inc/txttxmrk.hxx
> index 2329c1c5012e..a0c26987b707 100644
> --- a/sw/inc/txttxmrk.hxx
> +++ b/sw/inc/txttxmrk.hxx
> @@ -25,7 +25,7 @@ class SwTextNode;
>   class SwDoc;
>   
>   // Attribute for indices/tables of contents.
> -class SwTextTOXMark : public SwTextAttrEnd
> +class SAL_DLLPUBLIC_RTTI SwTextTOXMark : public SwTextAttrEnd
>   {
>       SwTextNode * m_pTextNode;
>       sal_Int32 * m_pEnd;   // 0 if SwTOXMark without AlternativeText
> diff --git a/sw/inc/unocrsr.hxx b/sw/inc/unocrsr.hxx
> index bcc0a5f27ae8..9a10a891c032 100644
> --- a/sw/inc/unocrsr.hxx
> +++ b/sw/inc/unocrsr.hxx
> @@ -32,7 +32,7 @@ namespace sw
>       };
>   }
>   
> -class SwUnoCursor : public virtual SwCursor
> +class SAL_DLLPUBLIC_RTTI SwUnoCursor : public virtual SwCursor
>   {
>   private:
>       bool m_bRemainInSection : 1;
> diff --git a/sw/source/core/inc/DocumentRedlineManager.hxx b/sw/source/core/inc/DocumentRedlineManager.hxx
> index 8412e9a57c04..f962d4fb6a70 100644
> --- a/sw/source/core/inc/DocumentRedlineManager.hxx
> +++ b/sw/source/core/inc/DocumentRedlineManager.hxx
> @@ -28,7 +28,7 @@ class SwDoc;
>   namespace sw
>   {
>   
> -class DocumentRedlineManager : public IDocumentRedlineAccess
> +class SAL_DLLPUBLIC_RTTI DocumentRedlineManager : public IDocumentRedlineAccess
>   {
>   public:
>       DocumentRedlineManager( SwDoc& i_rSwdoc );
> diff --git a/sw/source/core/inc/UndoManager.hxx b/sw/source/core/inc/UndoManager.hxx
> index 3f7d9b34f631..fda9c734a7e6 100644
> --- a/sw/source/core/inc/UndoManager.hxx
> +++ b/sw/source/core/inc/UndoManager.hxx
> @@ -33,7 +33,7 @@ class SwView;
>   
>   namespace sw {
>   
> -class UndoManager
> +class SAL_DLLPUBLIC_RTTI UndoManager
>       : public IDocumentUndoRedo
>       , public SdrUndoManager
>   {
> diff --git a/sw/source/core/inc/ftnboss.hxx b/sw/source/core/inc/ftnboss.hxx
> index ba363e53a2f7..6e1f5c24fd67 100644
> --- a/sw/source/core/inc/ftnboss.hxx
> +++ b/sw/source/core/inc/ftnboss.hxx
> @@ -45,7 +45,7 @@ enum class SwNeighbourAdjust {
>   
>   typedef std::vector<SwFootnoteFrame*> SwFootnoteFrames;
>   
> -class SwFootnoteBossFrame: public SwLayoutFrame
> +class SAL_DLLPUBLIC_RTTI SwFootnoteBossFrame: public SwLayoutFrame
>   {
>       // for private footnote operations
>       friend class SwFrame;
> diff --git a/sw/source/core/inc/pagefrm.hxx b/sw/source/core/inc/pagefrm.hxx
> index 887c2ba07c7f..39fdce0d7cc6 100644
> --- a/sw/source/core/inc/pagefrm.hxx
> +++ b/sw/source/core/inc/pagefrm.hxx
> @@ -37,7 +37,7 @@ class SwAnchoredObject;
>   
>   /// A page of the document layout. Upper frame is expected to be an SwRootFrame
>   /// instance. At least an SwBodyFrame lower is expected.
> -class SwPageFrame: public SwFootnoteBossFrame
> +class SAL_DLLPUBLIC_RTTI SwPageFrame: public SwFootnoteBossFrame
>   {
>       friend class SwFrame;
>   
> diff --git a/sw/source/core/inc/rootfrm.hxx b/sw/source/core/inc/rootfrm.hxx
> index d9893e6e31f9..91244888ce86 100644
> --- a/sw/source/core/inc/rootfrm.hxx
> +++ b/sw/source/core/inc/rootfrm.hxx
> @@ -77,7 +77,7 @@ using SwDestroyList = std::set<SwSectionFrame*>;
>   
>   /// The root element of a Writer document layout. Lower frames are expected to
>   /// be SwPageFrame instances.
> -class SwRootFrame: public SwLayoutFrame
> +class SAL_DLLPUBLIC_RTTI SwRootFrame: public SwLayoutFrame
>   {
>       // Needs to disable the Superfluous temporarily
>       friend void AdjustSizeChgNotify( SwRootFrame *pRoot );
> diff --git a/sw/source/uibase/inc/chldwrap.hxx b/sw/source/uibase/inc/chldwrap.hxx
> index 0ff0823950b8..b6f5b41ab3b1 100644
> --- a/sw/source/uibase/inc/chldwrap.hxx
> +++ b/sw/source/uibase/inc/chldwrap.hxx
> @@ -24,7 +24,7 @@
>   
>   class SwDocShell;
>   
> -class SwChildWinWrapper : public SfxChildWindow
> +class SAL_DLLPUBLIC_RTTI SwChildWinWrapper : public SfxChildWindow
>   {
>       Timer       m_aUpdateTimer;
>       SwDocShell* m_pDocSh;
> diff --git a/sw/source/uibase/inc/pview.hxx b/sw/source/uibase/inc/pview.hxx
> index cb4b6f5a788e..53b8decd504e 100644
> --- a/sw/source/uibase/inc/pview.hxx
> +++ b/sw/source/uibase/inc/pview.hxx
> @@ -43,7 +43,7 @@ class SvtAccessibilityOptions;
>   class SwPagePreviewLayout;
>   
>   // Delete member <mnVirtPage> and its accessor
> -class SwPagePreviewWin : public vcl::Window
> +class SAL_DLLPUBLIC_RTTI SwPagePreviewWin : public vcl::Window
>   {
>       SwViewShell* mpViewShell;
>       sal_uInt16 mnSttPage;


More information about the LibreOffice mailing list