diff --git a/tests/Sanity/upstream-prettyprinters/files/rhel-8.10__gcc.patch b/tests/Sanity/upstream-prettyprinters/files/rhel-8.10__gcc.patch new file mode 100644 index 0000000..be4cedf --- /dev/null +++ b/tests/Sanity/upstream-prettyprinters/files/rhel-8.10__gcc.patch @@ -0,0 +1,10 @@ +--- ./libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc.orig 2025-03-24 05:44:37.770576897 -0400 ++++ ./libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc 2025-03-24 05:44:50.232576897 -0400 +@@ -78,7 +78,6 @@ + // { dg-final { regexp-test am {std::any containing std::(__debug::)?map with 3 elements = {\[1\] = 2, \[3\] = 4, \[5\] = 6}} } } + struct local_type { int i = 99; }; + any al = local_type{}; +-// { dg-final { note-test al {std::any containing local_type = {[contained value] = {i = 99}}} } } + + struct S { operator int() { throw 42; }}; + variant v0; diff --git a/tests/Sanity/upstream-prettyprinters/main.fmf b/tests/Sanity/upstream-prettyprinters/main.fmf new file mode 100644 index 0000000..d381316 --- /dev/null +++ b/tests/Sanity/upstream-prettyprinters/main.fmf @@ -0,0 +1,36 @@ +summary: Run the prettyprinters tests of the upstream testsuite +contact: Vaclav Kadlcik +component: + - gcc +enabled: true +test: ${WITH_SCL:-bash} ./runtest.sh +tag: + - NoRHIVOS +framework: beakerlib +require+: + - gcc + - gcc-c++ + - rpm-build + - dejagnu + - xz +recommend: + - dnf-utils + - yum-utils + - glibc-devel.i686 + - libstdc++-debuginfo +duration: 1h +adjust+: + - enabled: false + when: distro == rhel-9 and distro ~< rhel-9.6 + continue: false + - enabled: false + when: distro == rhel-9.6 and collection is not defined + continue: false + - enabled: false + when: distro == rhel-8 and distro ~< rhel-8.10 + continue: false + - enabled: false + when: distro < rhel-8 + continue: false +extra-summary: /tools/gcc/Sanity/suite_gcc +extra-task: /tools/gcc/Sanity/suite_gcc diff --git a/tests/Sanity/upstream-prettyprinters/runtest.sh b/tests/Sanity/upstream-prettyprinters/runtest.sh new file mode 100755 index 0000000..fc17483 --- /dev/null +++ b/tests/Sanity/upstream-prettyprinters/runtest.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash + +# Load libraries +. /usr/share/beakerlib/beakerlib.sh || exit 1 +. "${0%/*}"/../../lib/common.sh || exit 1 + +GCC="${GCC:-$(type -P gcc)}" +GCC_RPM_NAME=$(rpm --qf '%{name}' -qf "$GCC") + +PACKAGES="${GCC_RPM_NAME} ${GCC_RPM_NAME}-c++ rpm-build dejagnu" + +print_site_exp () { + echo 'set rootme "."' && \ + echo 'set tmpdir "'"$PWD"'"' && \ + echo 'set CFLAGS ""' && \ + echo 'set CXXFLAGS ""' && \ + echo 'set GCC_UNDER_TEST "gcc"' && \ + echo 'set GXX_UNDER_TEST "g++"' && \ + echo 'set GFORTRAN_UNDER_TEST "gfortran"' && \ + echo 'set OBJC_UNDER_TEST "no"' +} + +print_dts_exp () { + # The patched sources of GTS GCC give special care to the libstdc++ + # testsuite because GTS GCC doesn't ship its own libstdc++ but uses + # *system* libstdc++. However we update system libstdc++ prettyprinters + # to be on par with GTS needs (RHEL-50290). Let's revert that care + # normally given to the GTS libstdc++ testsuite; specifically, let's + # pretend that system GCC is of the same version as the GTS GCC we are + # testing. + echo 'proc get_dts_base_major_version { } {' && \ + echo " return $(gcc -dumpversion | cut -d. -f1)" && \ + echo '}' +} + +rlJournalStart + rlPhaseStartSetup + rlLogInfo "PACKAGES=$PACKAGES" + rlLogInfo "COLLECTIONS=$COLLECTIONS" + rlLogInfo "GCC=$GCC" + rlLogInfo "SKIP_COLLECTION_METAPACKAGE_CHECK=$SKIP_COLLECTION_METAPACKAGE_CHECK" + + # We optionally need to skip checking for the presence of the metapackage + # because that would pull in all the dependent toolset subrpms. We do not + # always want that, especially in CI. + _COLLECTIONS="$COLLECTIONS" + if ! test -z "$SKIP_COLLECTION_METAPACKAGE_CHECK"; then + for c in $SKIP_COLLECTION_METAPACKAGE_CHECK; do + rlLogInfo "ignoring metapackage check for collection $c" + COLLECTIONS=$(shopt -s extglob && echo "${COLLECTIONS//$c/}"); export COLLECTIONS + done + fi + rlLogInfo "(without skipped) COLLECTIONS=$COLLECTIONS" + rlAssertRpm --all + export COLLECTIONS="$_COLLECTIONS" + + rlRun "TmpDir=\$(mktemp --tmpdir=/home --directory)" + # shellcheck disable=SC2154 + rlRun "cp files/* $TmpDir" + rlRun "pushd $TmpDir" + + rlRun 'debuginfo-install -y libstdc++' 0-255 # best effort only + + rlFetchSrcForInstalled "$GCC_RPM_NAME" || yumdownloader --source "$GCC_RPM_NAME" + rlRun 'ls ./*.src.rpm' + rlRun 'yum-builddep -y --skip-unavailable ./*.src.rpm' 0-255 # best effort only + + rlRun 'mkdir rpmbuild' + rlRun "rpm --define='_topdir $PWD/rpmbuild' -i ./*.src.rpm" + rlRun "rpmbuild --define='_topdir $PWD/rpmbuild' -bp --nodeps rpmbuild/SPECS/*.spec" + + # Find the root od the extracted sources. Varies with rpmbuild. + # shellcheck disable=SC2012 + CONFIGURE=$(ls -d rpmbuild/BUILD/gcc-*/gcc-*/configure rpmbuild/BUILD/gcc-*/configure 2>/dev/null | head -n 1) + SRCROOT=${CONFIGURE%/*} + rlLogInfo "SRCROOT=$SRCROOT" + + if [[ "$GCC_RPM_NAME" == *toolset* ]]; then + # GTS/DTS actually uses the system libstdc++ SO. For some fine + # tuning in the test suite we need to know the major version + # of GCC it belogs to. It's usually set in the following "exp" + # file but not always so let's just override it. + rlRun "print_dts_exp >$SRCROOT/libstdc++-v3/testsuite/lib/dts.exp" + rlAssertGrep 'return [0-9]' "$SRCROOT/libstdc++-v3/testsuite/lib/dts.exp" + fi + + # Exclude known problematic tests + + # RHEL-82258 + if rlIsRHEL 8.10 && [[ "$GCC_RPM_NAME" = gcc ]]; then + rlRun "patch -d $SRCROOT -p0 <$PWD/rhel-8.10__gcc.patch" + fi + rlPhaseEnd + + rlPhaseStartTest + rlRun 'print_site_exp >site.exp' + rlRun "runtest --srcdir $SRCROOT/libstdc++-v3/testsuite --tool libstdc++ --target_board=unix/-fstack-protector-strong prettyprinters.exp" + rlRun 'ls ./*.sum ./*.log' + for i in ./*.log; do + rlAssertGrep '^# of expected passes[[:space:]]*[1-9]' "$i" + rlAssertNotGrep '^FAIL:' "$i" + rlAssertNotGrep '^UNRESOLVED:' "$i" + done + for i in ./*.{sum,log}; do + rlRun "xz $i" + rlFileSubmit "$i.xz" "$i.xz" + done + rlFileSubmit site.exp site.exp + rlPhaseEnd + + rlPhaseStartCleanup + rlRun popd + rlRun "rm -r $TmpDir" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd