Compare commits

..

1 commit

Author SHA1 Message Date
Jesus Checa Hidalgo
85fc2de396 Shell static analysis
Add pre-commit hook for static analysis on shell scripts (shellcheck)
Fixed issues flagged by shellcheck.
2024-08-05 09:16:47 +02:00
5 changed files with 20 additions and 16 deletions

View file

@ -12,3 +12,10 @@ repos:
rev: 1.32.2
hooks:
- id: tmt-lint
- repo: https://github.com/koalaman/shellcheck-precommit
rev: v0.10.0
hooks:
- id: shellcheck
require_serial: true # Podman has trouble running concurrently
args: ["--exclude=SC1091"] # Ignore "Not following" sourced scripts

View file

@ -4,13 +4,14 @@
rlJournalStart
rlPhaseStartSetup
declare tmp
rlRun "tmp=$(mktemp -d)" 0 "Create a temp dir"
# Get the compiler-rt package name from the tmt required packages, which should
# address the issue of getting the correct name regardless it's a compat package
# or not. The package can be named either compiler-rt or compiler-rt[0-9]+
rlRun "COMPILER_RT=$(rlGetYAMLdeps | tr ' ' '\n' | grep -E "compiler-rt[[:digit:]]*$")"
# Make sure to get only the main arch, so we can deal with multilib issues.
rlRun "COMPILER_RT_NVR=$(rpm -q ${COMPILER_RT} | grep $(uname -m))"
rlRun "COMPILER_RT_NVR=$(rpm -q "${COMPILER_RT}" | grep "$(uname -m)")"
# Use dnf repoquery --installed so we *don't* query any repos but the
# local rpm database instead. That should handle packages installed
# using rpm, that are not in repos, and avoid timeouts if repo connection
@ -23,7 +24,7 @@ rlJournalStart
rlPhaseEnd
rlPhaseStartTest
for file in $(rpm -ql $COMPILER_RT_NVR); do
for file in $(rpm -ql "$COMPILER_RT_NVR"); do
# Skip iteration if the file is not a symlink
[[ -L $file ]] || continue
@ -36,13 +37,13 @@ rlJournalStart
# Up to this point, the linked file exists.
# If the owner of the target compiler-rt package itself that's
# correct and we can skip to the next file.
target=$(readlink -f $file)
OWNER_NVR=$(rpm -qf $target)
target=$(readlink -f "$file")
OWNER_NVR=$(rpm -qf "$target")
[[ "$OWNER_NVR" == "$COMPILER_RT_NVR" ]] && continue
# The target exists but it's not owned by compiler-rt. It must be
# owned by one of its dependencies, else flag a failure.
if ! cat $tmp/dependencies.log | grep $OWNER_NVR; then
if ! grep "$OWNER_NVR" "$tmp/dependencies.log"; then
rlFail "$file pointing to $target is a dangling symlink owned by $OWNER_NVR"
fi
done

View file

@ -20,7 +20,3 @@ adjust+:
- enabled: false
because: "compiler-rt.i686 may not be available in snapshot builds when x86_64 tests are executed"
when: snapshot is defined
- enabled: false
because: "i686 packages not available for compat"
when: compat is defined

View file

@ -1,15 +1,15 @@
#!/bin/sh -ux
#!/bin/bash -ux
# Do NOT set exit after error flag (set -e). Let all the optimizations to be run
tmp=$(mktemp -d)
result=0
# Test the reproducer with all the optimization levels
for opt_level in 0 1 2 3; do
clang++ --rtlib=compiler-rt -O$opt_level test.cpp -o $tmp/test_O$opt_level
$tmp/test_O$opt_level | grep '0.122986' || result=1
clang++ --rtlib=compiler-rt -O$opt_level test.cpp -o "${tmp}/test_O${opt_level}"
"${tmp}/test_O${opt_level}" | grep '0.122986' || result=1
done
rm -rf $tmp
rm -rf "$tmp"
if [[ "$result" == 1 ]]; then
exit 1
fi

View file

@ -14,7 +14,7 @@ framework: shell
# Always define "test" key and override in adjust or in each specific test
# metadata if needed.
test: "PATH=/usr/lib64/llvm18/bin:$PATH ./test.sh"
test: ./test.sh
# Commonly used keys are initialized to empty.
require: []
@ -24,8 +24,8 @@ tag: []
adjust+:
# Common requirements when LLVM is not SCL-ized
- require+:
- clang18
- compiler-rt18
- clang
- compiler-rt
when: collection is not defined
# Requirements for SCL-ized LLVM