#!/bin/sh # # Try to compile all programs in the test/compilation_failure directory. # Compilation must fail and the error message must match the pattern in the # corresponding .pattern file. # DIR="test/compilation_failure" CXX=${CXX:-clang++} if [ `uname -s` = "Darwin" ]; then CXXFLAGS="$CXXFLAGS -stdlib=libc++" fi error_msg() { if [ ! -z "$1" ]; then printf 'output was:\n=======\n%s\n=======\n' "$1" fi } exit_code=0 for test_code in $DIR/*.cpp; do name=`basename $test_code .cpp` result=`${CXX} -std=c++11 -c -o /dev/null -I./include ${CXXFLAGS} ${test_code} 2>&1` status=$? if [ $status = 1 ]; then expected=`sed -n -e '/@EXPECTED/s/.*: \+//p' ${test_code}` if echo $result | grep -q "$expected"; then echo "$name [OK]" else echo "$name [FAILED - wrong error message]" echo "Expected error message: $expected" error_msg "$result" exit_code=1 fi elif [ $status = 0 ]; then echo "$name [FAILED - compile was successful]" error_msg "$result" exit_code=1 else echo "$name [FAILED - unknown error in compile]" error_msg "$result" exit_code=1 fi done exit ${exit_code}