blob: 910af28b55a5374ca3ee7a2f4ca74ff1687de85b [file] [log] [blame]
#!/usr/bin/env bash
# This test makes sure that if lto is enabled:
#
# 1. We have lto object files for swift in our build tree. We swift and libswiftdemangle.
# 2. These lto output files all have line tables in the swift include directory,
# but do not have full debug info. To check for the latter case, we look for
# SmallVector a commonly used data type.
# 3. We use swift-demangle since it is a much smaller executable than all of
# swift.
set -e
set -u
# REQUIRES: lto
# REQUIRES: OS=macosx
# REQUIRES: tools-debuginfo
# RUN: rm -rf %t
# RUN: mkdir -p %t
# RUN: %s %swift_obj_root %t %llvm-dwarfdump
OBJECT_ROOT=$1
TEMP_DIR=$2
DWARFDUMP=$3
SWIFT_DEMANGLE_LTO_OBJECT_FILE=$(find ${OBJECT_ROOT} -path '*/swift-demangle/swift-demangle*-lto.o' | head -1)
# Check that we have a temporary lto file for swift.
if [[ -z "${SWIFT_DEMANGLE_LTO_OBJECT_FILE}" ]]; then
echo "Failed to find a temporary debug file for swift-demangle?!"
exit 1
else
echo "Found swift-demangle LTO object!"
fi
${DWARFDUMP} --debug-line ${SWIFT_DEMANGLE_LTO_OBJECT_FILE} > ${TEMP_DIR}/line.info
# Make sure that we found a line table.
if [[ -z "$(sed -n "/include_directories.*=.*include\/swift/{p;q;}" ${TEMP_DIR}/line.info)" ]] ; then
echo "Failed to find line table information for swift-demangle?!"
exit 1
else
echo "Found line table information for swift-demangle in swift LTO object"
fi
${DWARFDUMP} -apple-types ${SWIFT_DEMANGLE_LTO_OBJECT_FILE} > ${TEMP_DIR}/types.info
# And that it does not have full debug info
if [[ -n "$(sed -n '/Name:.*SmallVector<..*>/{p;q;}' ${TEMP_DIR}/types.info)" ]] ; then
echo "Found full debug info in the swift-demangle lto object?!"
exit 1
else
echo "Did not find full debug info for swift-demangle lto object!"
fi
echo "The swift-demangle binary only has line table debug info!"
set +u
set +e