I had accidentally developed patch set 1 of
<https://gerrit.libreoffice.org/#/c/82554/1> "Extend loplugin:salbool to
loplugin:fakebool" in an environment where compilerplugins was built
with -std=c++2a (and thus accidentally used some constructs that are not
compatible with the Clang 5.0.2 baseline of C++11).
I thought it would be nice to be able to use at least C++17 in
compilerplugins code, so I patched
diff --git a/configure.ac b/configure.ac
index 1711ea8a3623..fe4294b207cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7040,6 +7040,26 @@ if test "$COM_IS_CLANG" = "TRUE"; then
COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
fi
fi
+ dnl Use at least C++17 when building compilerplugins. There are three cases to consider:
+ dnl 1 If COMPILER_PLUGINS_CXX already contains a -std= option (i.e., passed in by the
+ dnl user), use it unconditionally (drop any potential -std= from
+ dnl COMPILER_PLUGINS_CXXFLAGS).
+ dnl 2 Otherwise, if COMPILER_PLUGINS_CXXFLAGS contains a -std= option (as is normally the
+ dnl case for `llvm-config --cxxflags`): If it is -std=c++11 or -std=c++14, replace it
+ dnl with -std=c++17. (And otherwise keep it.)
+ dnl 3 Otherwise (see e.g. <https://github.com/llvm/llvm-project/commit/
+ dnl 7a25de6d2073f77ea1a0d8f4cd715bec55678941> "llvm-config: emit the C++ standard flag
+ dnl into CXXFLAGS" for cases where it had gone missing from `llvm-config --cxxflags'),
+ dnl add -std=c++17 to COMPILER_PLUGINS_CXXFLAGS.
+ if printf '%s' "$COMPILER_PLUGINS_CXX" | grep -e -std=; then
+ COMPILER_PLUGINS_CXXFLAGS=$(printf '%s' "$COMPILER_PLUGINS_CXXFLAGS" \
+ | sed -e 's/-std=[[^ ]]*//')
+ elif printf '%s' "$COMPILER_PLUGINS_CXXFLAGS" | grep -e '-std=c++1[[14]]'; then
+ COMPILER_PLUGINS_CXXFLAGS=$(printf '%s' "$COMPILER_PLUGINS_CXXFLAGS" \
+ | sed -e 's/-std=[[^ ]]*/-std=c++17/')
+ elif ! printf '%s' "$COMPILER_PLUGINS_CXXFLAGS" | grep -e -std=; then
+ COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -std=c++17"
+ fi
AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
AC_LANG_PUSH([C++])
save_CXX=$CXX
in the hope that the Clang 5.0.2 baseline, and all the
COMPILER_PLUGINS_CXX used by people out there to build compilerplugins,
would be fine with -std=c++17.
However, both my local installs of Clang 5.0.2 and 6.0.0 would fail with
[GEN] compilerplugins/clang/sharedvisitor/dllprivate.plugininfo
analyzer: /data/sbergman/clang/5.0.2/src/tools/clang/lib/Serialization/ASTReader.cpp:7150: virtual clang::Stmt* clang::ASTReader::GetExternalDeclStmt(uint64_t): Assertion `NumCurrentElementsDeserializing == 0 && "should not be called while already deserializing"' failed.
/bin/sh: line 1: 569762 Aborted (core dumped) /data/sbergman/lo-clang/core/compilerplugins/clang/sharedvisitor/analyzer /data/sbergman/lo-clang/core/compilerplugins/clang/dllprivate.cxx > /data/sbergman/lo-clang/core/compilerplugins/clang/sharedvisitor/dllprivate.plugininfo
make[1]: *** [/data/sbergman/lo-clang/core/compilerplugins/Makefile-clang.mk:243: /data/sbergman/lo-clang/core/compilerplugins/clang/sharedvisitor/dllprivate.plugininfo] Error 134
make[1]: Leaving directory '/data/sbergman/lo-clang/core'
etc., and only Clang 7.0.0 appears to have that fixed.
_______________________________________________
LibreOffice mailing list
LibreOffice@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/libreoffice