test-m32-m54-options: manage dependencies in fmf file

Also include updated script from the RHEL tests and fixes for rawhide.
Note: dependencies were configured for x86_64 only.
This commit is contained in:
Andrej Cernek 2023-01-26 10:26:48 +01:00 committed by mcermak
parent 02ae2beb4c
commit 85fff34818
4 changed files with 146 additions and 185 deletions

View File

@ -3,7 +3,7 @@ class X
{ {
T p; T p;
public: public:
template <class U> auto f() -> decltype(+p) { } template <class U> auto f() -> decltype(+p) { return p; }
}; };
struct A struct A

View File

@ -10,7 +10,7 @@ auto apply (T t) -> decltype (t())
} }
template <class T> template <class T>
T f(T t) void f(T t)
{ {
T t2 = t; T t2 = t;
if (t != [=]()->T { return t; }()) if (t != [=]()->T { return t; }())

View File

@ -1,5 +1,5 @@
summary: Try -m32 and -m64 options. summary: Try -m32 and -m64 options.
description: '' description: Try -m32 and -m64 options
contact: mcermak@redhat.com contact: mcermak@redhat.com
component: component:
- gcc - gcc
@ -10,20 +10,16 @@ require:
- gcc - gcc
- gcc-c++ - gcc-c++
- gcc-gfortran - gcc-gfortran
- glibc-common
- libgcc
- libgomp
- libgfortran
- libstdc++
- libstdc++-devel
- glibc-devel - glibc-devel
- libgfortran
- libgomp
- libstdc++-devel
- libitm - libitm
recommend: recommend:
- libgfortran44.i686 - libgfortran5
- libgfortran44.x86_64 - libitm-devel
- libgfortran4.i686 - libquadmath-devel
- libgfortran4.x86_64 duration: 20m
duration: 10m
enabled: true enabled: true
link: link:
- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1113429 - relates: https://bugzilla.redhat.com/show_bug.cgi?id=1113429
@ -31,21 +27,32 @@ adjust:
- enabled: false - enabled: false
when: arch == ia64, ppc64, s390, s390x when: arch == ia64, ppc64, s390, s390x
continue: false continue: false
- require+: - enabled: false
- glibc-devel.i686 when: arch == aarch64
- glibc-devel.x86_64
- libgcc.i686
- libgcc.x86_64
- libgfortran.i686
- libgfortran.x86_64
- libgomp.i686
- libgomp.x86_64
- libitm.i686
- libitm.x86_64
- libstdc++.i686
- libstdc++.x86_64
when: arch == x86_64
continue: false continue: false
because: no -m64 nor -m32 there
- require+:
- glibc-devel.x86_64
- glibc-devel.i686
- libgfortran.x86_64
- libgfortran.i686
- libstdc++-devel.x86_64
- libstdc++-devel.i686
- libitm.x86_64
- libitm.i686
- libgomp.x86_64
- libgomp.i686
- libquadmath.x86_64
- libquadmath.i686
when: arch == x86_64
- recommend+:
- libgfortran5.x86_64
- libgfortran5.i686
- libitm-devel.x86_64
- libitm-devel.i686
- libquadmath-devel.x86_64
- libquadmath-devel.i686
when: arch == x86_64
extra-nitrate: TC#0197178 extra-nitrate: TC#0197178
extra-summary: /tools/gcc/Sanity/test-m32-m64-options extra-summary: /tools/gcc/Sanity/test-m32-m64-options
extra-task: /tools/gcc/Sanity/test-m32-m64-options extra-task: /tools/gcc/Sanity/test-m32-m64-options

View File

@ -26,188 +26,142 @@
# #
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This is for Toolset.
#
# In this test, we try to compile and run programs using -m32 and -m64. # In this test, we try to compile and run programs using -m32 and -m64.
# We compile C, C++ and Fortran Hello World programs. Also, there are two # We compile C, C++ and Fortran Hello World programs. Also, there are two
# proglets which are exercising some C++11 features. Furthermore, we try # proglets which are exercising some C++11 features. Furthermore, we try
# -fgnu-tm, -fopenmp options. We also use libquadmath a little bit. # -fgnu-tm, -fopenmp options. We also use libquadmath a little bit.
# We call a function from libgcc. We also use the __thread keyword. # We call a function from libgcc. We also use the __thread keyword.
# Everything should be ok when running under e.g.:
# scl enable devtoolset-1.0 bash
# Note, that gfortran is not a part of 1.0 release.
# Include Beaker environment # Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1 . /usr/share/beakerlib/beakerlib.sh || exit 1
PACKAGES=(gcc gcc-c++ gcc-gfortran glibc-common libgcc libgomp libgfortran glibc-devel libitm) GCC=${GCC:-$(type -P gcc)}
GCC_RPM_NAME=$(rpm --qf '%{name}' -qf $GCC)
PACKAGES_X86_64=(libgomp libgfortran glibc-devel libgcc libitm) [[ "$GCC_RPM_NAME" == *toolset* ]] && TOOLSET=${GCC_RPM_NAME%-gcc} || TOOLSET=''
# Choose the compiler. if [ -n "`rlGetPrimaryArch`" ]; then
GCC=${GCC:-gcc} PRI_ARCH=$(rlGetPrimaryArch)
GXX=${GXX:-g++} else
GFORTRAN=${GFORTRAN:-gfortran} PRI_ARCH="$(uname -i)"
PACKAGE=$GCC
# Set the variabile UNDER_DTS on non-empty string, when run under devtoolset
if $( echo `which gcc` | grep -qE '/opt/rh/' ); then
UNDER_DTS="true"
# Set the actual version of DTS
DTS=`which gcc | awk 'BEGIN { FS="/" } { print $4 }'`
fi fi
rlJournalStart # State applicable -m<bits> switches
rlPhaseStartSetup SWITCHES='-m64 -m32'
for p in "${PACKAGES[@]}"; do case "$PRI_ARCH" in
rpm -q "$p" || yum install -y $p i686)
rlAssertRpm "$p" SWITCHES=-m32 # just base RHEL-6/i386
done; unset p ;;
yum update -y libitm # this is a hack, since libitm is a troublemaker ppc64le) # we never had 32 support there
if [ -n "`rlGetSecondaryArch`" ]; then SWITCHES=-m64
rlCheckRpm "libitm.`rlGetSecondaryArch`" || yum install -y libitm.`rlGetSecondaryArch` ;;
rlAssertRpm "libitm.`rlGetSecondaryArch`" aarch64)
fi # Not only we never had 32-bit support there, GCC on this architecture
# doesn't accept the -m64 switch either. This test isn't applicable
rlCheckRpm "libstdc++-devel.`rlGetPrimaryArch`" || yum install -y libstdc++-devel.`rlGetPrimaryArch` # at all and should be excluded by its relevancy, e.g. in TCMS:
rlAssertRpm "libstdc++-devel.`rlGetPrimaryArch`" # arch = aarch64: False
# RHEL-8 CI debugging hack (to be removed when not needed): exit 1
rlRun "rpmquery -l libstdc++-devel.`rlGetPrimaryArch` | grep -e bits/c++config" ;;
rlRun "rpmquery -l libstdc++-devel.`rlGetPrimaryArch` | grep -e iostream" ppc64|s390x) # 32-bit support present only in system GCC of RHEL <8
if [[ -z "$TOOLSET" ]] && rlIsRHEL '<8'; then
if [ -n "`rlGetSecondaryArch`" ]; then if [[ "$PRI_ARCH" != s390x ]]; then
rlCheckRpm "libitm.`rlGetSecondaryArch`" || yum install -y libitm.`rlGetSecondaryArch` SWITCHES='-m64 -m32'
rlAssertRpm "libitm.`rlGetSecondaryArch`" else
fi SWITCHES='-m64 -m31'
fi
if [ ! -z ${UNDER_DTS} ]; then else
rlCheckRpm "$DTS-libstdc++-devel" || yum install -y $DTS-libstdc++-devel SWITCHES=-m64
rlAssertRpm "$DTS-libstdc++-devel"
if [ "`arch`" = 'x86_64' ]; then
rlCheckRpm "$DTS-libquadmath-devel" || yum install -y $DTS-libquadmath-devel
rlAssertRpm "$DTS-libquadmath-devel"
fi
if rlIsRHEL '<=7'; then # no libgfortran[45] on RHEL8+
rlCheckRpm "libgfortran4" || yum install -y libgfortran4
if [ -n "`rlGetSecondaryArch`" ]; then
rlCheckRpm "libgfortran4.`rlGetSecondaryArch`" || yum install -y libgfortran4.`rlGetSecondaryArch`
rlAssertRpm "libgfortran4.`rlGetSecondaryArch`"
fi fi
rlCheckRpm "libgfortran5" || yum install -y libgfortran5 ;;
rlAssertRpm "libgfortran5" && yum -y update libgfortran5
if [ -n "`rlGetSecondaryArch`" ]; then
rlCheckRpm "libgfortran5.`rlGetSecondaryArch`" || yum install -y libgfortran5.`rlGetSecondaryArch`
rlAssertRpm "libgfortran5.`rlGetSecondaryArch`"
fi
fi
fi
# Check whether on rhel6 x86_64 i686-packages are installed too.
# On rhel5 i386-packages should be already installed.
if [ "$(uname -i)" == "x86_64" ]; then
for pack in "${PACKAGES_X86_64[@]}"; do
rpm -q ${pack}.i?86 || yum install -y ${pack}.i?86
done; unset pack
if [ ! -z ${UNDER_DTS} ]; then
yum install -y $DTS-libstdc++-devel.i?86
yum install -y $DTS-libquadmath-devel.i?86
fi
fi
rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory"
# We need some files.
rlRun "cp -v hello.{c,cpp,f90} tm.c quad.c thr-init-2.c \
clear_cache.c omphello.c lambda-template.C cpp11.cpp $TmpDir"
rlRun "pushd $TmpDir"
rlPhaseEnd
rlPhaseStartSetup "Showing compiler versions"
for compiler in $GCC $GXX $GFORTRAN
do
rlLog "Version of compiler: $compiler"
eval "$compiler --version 2>&1" | while read line
do
rlLog " $line"
done
done
rlPhaseEnd
ARCH="$(uname -i)"
case "$ARCH" in
"aarch64") export SWITCHES="-mlittle-endian" # we don't have -m64, so let's use some dummy switch that is enabled by default
;;
"i386") export SWITCHES="-m32"
;;
"ppc64") export SWITCHES="-m32 -m64"
;;
"ppc64le") export SWITCHES="-m64"
;;
"s390x") export SWITCHES="-m31 -m64"
;;
"x86_64") export SWITCHES="-m32 -m64"
;;
esac esac
# Always try both -m32 and -m64. rlJournalStart
for m in $SWITCHES; do rlPhaseStartSetup
rlPhaseStartTest "Compile and run [$m]" rlLogInfo "COLLECTIONS=$COLLECTIONS"
rlRun "$GCC $m hello.c -o hello_c" rlLogInfo "GCC=$GCC"
rlRun "./hello_c" rlLogInfo "SKIP_COLLECTION_METAPACKAGE_CHECK=$SKIP_COLLECTION_METAPACKAGE_CHECK"
rlRun "$GXX $m hello.cpp -o hello_cpp" # We optionally need to skip checking for the presence of the metapackage
rlRun "./hello_cpp" # 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"
export COLLECTIONS=$(shopt -s extglob && echo ${COLLECTIONS//$c/})
done
fi
rlLogInfo "(without skipped) COLLECTIONS=$COLLECTIONS"
export COLLECTIONS="$_COLLECTIONS"
# Now try a few C++11 features. rlRun "TmpDir=\$(mktemp -d)"
$GXX -xc++ -std=c++11 - <<< "int main(){}" rlRun "cp -v hello.{c,cpp,f90} tm.c quad.c thr-init-2.c clear_cache.c omphello.c lambda-template.C cpp11.cpp $TmpDir"
if test $? -eq 0; then rlRun "pushd $TmpDir"
rlRun "$GXX $m -std=c++11 lambda-template.C -o lambda" rlPhaseEnd
rlRun "./lambda"
rlRun "$GXX $m -std=c++11 cpp11.cpp -o cpp11" rlPhaseStartSetup "Showing compiler versions"
rlRun "./cpp11" for compiler in gcc g++ gfortran; do
fi rlLogInfo "Version of compiler: $compiler"
eval "$compiler --version 2>&1" | while read line; do
rlLogInfo " $line"
done
done
rlPhaseEnd
rlRun "$GFORTRAN $m hello.f90 -o hello_fortran" for m in $SWITCHES; do
rlRun "./hello_fortran" rlPhaseStartTest "Compile and run [$m]"
# TM support is GCC >=4.7 only. # Test C
$GCC -xc -O2 -std=gnu99 -fgnu-tm - <<< "int main(){}" rlRun "gcc $m hello.c -o hello_c"
if test $? -eq 0; then rlRun ./hello_c
rlRun "$GCC $m -O2 -std=gnu99 -fgnu-tm tm.c -o tm"
rlRun "./tm"
fi
# Test OpenMP. # Test C++
rlRun "$GCC $m omphello.c -O2 -std=gnu99 -fopenmp -o omp" rlRun "g++ $m hello.cpp -o hello_cpp"
rlRun "./omp" rlRun ./hello_cpp
# Test __thread. # C++11 features. Not available in system GCC of RHEL-6
rlRun "$GCC $m thr-init-2.c -O2 -std=gnu99 -ftls-model=initial-exec -o thr" if ! rlIsRHEL 6 || [[ -n "$TOOLSET" ]]; then
rlRun "./thr" rlRun "g++ $m -std=c++11 lambda-template.C -o lambda"
rlRun ./lambda
# Now test some libquadmath stuff (__float128 support). rlRun "g++ $m -std=c++11 cpp11.cpp -o cpp11"
# libquadmath is mising on RHEL machines, usually. rlRun ./cpp11
# But with DTS, this should be available. fi
if [ ! -z ${UNDER_DTS} ]; then
if [ "`arch`" = 'x86_64' ]; then
rlRun "$GCC $m quad.c -O2 -std=gnu99 -lquadmath -o quad -lm"
rlRun "./quad"
else
rlLog "quadmath test skipped (needs x86_64)"
fi
fi
# And now something from libgcc, e.g. __builtin___clear_cache. # Test Fortran
rlRun "$GCC $m clear_cache.c -O2 -std=gnu99 -o cache" rlRun "gfortran $m hello.f90 -o hello_fortran"
rlRun "./cache" rlRun "./hello_fortran"
rlPhaseEnd
done; unset m
rlPhaseStartCleanup # Test TM. Not available in system GCC of RHEL-6
rlRun "popd" if ! rlIsRHEL 6 || [[ -n "$TOOLSET" ]]; then
rlRun "rm -r $TmpDir" 0 "Removing tmp directory" rlRun "gcc $m -O2 -std=gnu99 -fgnu-tm tm.c -o tm"
rlPhaseEnd rlRun ./tm
fi
# Test OpenMP
rlRun "gcc $m omphello.c -O2 -std=gnu99 -fopenmp -o omp"
rlRun ./omp
# Test __thread
rlRun "gcc $m thr-init-2.c -O2 -std=gnu99 -ftls-model=initial-exec -o thr"
rlRun ./thr
# Now test some libquadmath stuff (__float128 support).
if rpm -q ${GCC_RPM_NAME%%gcc}libquadmath-devel &>/dev/null; then
rlRun "gcc $m quad.c -O2 -std=gnu99 -lquadmath -o quad -lm"
rlRun ./quad
fi
# And now something from libgcc, e.g. __builtin___clear_cache.
rlRun "gcc $m clear_cache.c -O2 -std=gnu99 -o cache"
rlRun ./cache
rlPhaseEnd
done
rlPhaseStartCleanup
rlRun popd
rlRun "rm -r $TmpDir"
rlPhaseEnd
rlJournalPrintText rlJournalPrintText
rlJournalEnd rlJournalEnd