tests/extra/tc_ufcs_all_kinds: support gdc

Remove the usage of `-run` which isn't supported by gdc and only pass
`-verrors=0` to dmd and ldc2 since gdc doesn't support the flag and,
by default, all errors are printed.

Change the format in which errors are printed to keep it consistent
across all the three major compilers (a style that they all support is
the gnu style) and make the matching code in generate_tests.d more
readable by using a regex.

Signed-off-by: Andrei Horodniceanu <a.horodniceanu@proton.me>
This commit is contained in:
Andrei Horodniceanu 2024-04-30 15:43:54 +03:00
parent 27b1042959
commit cc77cfa4eb
3 changed files with 40 additions and 17 deletions

2
.gitignore vendored
View File

@ -31,6 +31,8 @@ stdout.txt
# script-generated expected with absolute file paths # script-generated expected with absolute file paths
tests/tc_locate_ufcs_function/expected.txt tests/tc_locate_ufcs_function/expected.txt
tests/tc_recursive_public_import/expected.txt tests/tc_recursive_public_import/expected.txt
# other script-generated files
tests/extra/tc_ufcs_all_kinds/generate_tests
# Dub files # Dub files
.dub .dub

View File

@ -129,29 +129,28 @@ int main(string[] args)
fs.write("proc_test.d", code); fs.write("proc_test.d", code);
auto output = executeShell("$DC -verrors=0 -c proc_test.d").output; // $DC and $ERROR_FLAGS are set up in run.sh
auto output = executeShell("$DC $ERROR_FLAGS -c proc_test.d").output;
size_t numErrors = 0; size_t numErrors = 0;
string[][string] variableIncompatibilities; string[][string] variableIncompatibilities;
// Example of a line we want to match: `proc_test.d:2568:22: error: [...]'
auto errRegex = regex(`proc_test\.d:([0-9]*):[0-9]*: error`, "i");
foreach (err; output.lineSplitter) foreach (err; output.lineSplitter)
{ {
if (!err.startsWith("proc_test.d(")) if (auto m = matchFirst(err, errRegex)) {
continue; auto lineNo = to!int(m[1]);
err = err["proc_test.d(".length .. $]; string line = lines[lineNo - 1];
auto lineNo = err.parse!int; enforce(line.endsWith("();"), "Unexpected error in line " ~ lineNo.to!string);
if (!err.startsWith("): Error: ")) line = line[0 .. $ - 3];
continue; string varName = line.findSplit(".")[0];
err = err["): Error: ".length .. $]; string funcName = line.findSplit(".")[2];
string line = lines[lineNo - 1]; // writeln("variable type ", varLookup[varName], " can't call ", funcLookup[funcName]);
enforce(line.endsWith("();"), "Unexpected error in line " ~ lineNo.to!string); variableIncompatibilities[varName] ~= funcName;
line = line[0 .. $ - 3]; numErrors++;
string varName = line.findSplit(".")[0]; }
string funcName = line.findSplit(".")[2];
// writeln("variable type ", varLookup[varName], " can't call ", funcLookup[funcName]);
variableIncompatibilities[varName] ~= funcName;
numErrors++;
} }
enforce(numErrors > 1_000, "compiler didn't error as expected, need to adjust tests!"); enforce(numErrors > 1_000, "compiler didn't error as expected, need to adjust tests!");

View File

@ -4,4 +4,26 @@ if [ -z "${DC:-}" ]; then
DC=dmd DC=dmd
fi fi
DC="$DC" "$DC" -run generate_tests.d "$1" DCBASE=$(basename ${DC})
# Set up ERROR_FLAGS to make all compilers output errors in the same
# format to make matching easier in generate_tests.d. Also make them
# output all errors.
if [[ ${DCBASE} == *gdc* ]]; then
outputFlag=-o
# Not needed as gdc defaults to printing all errors
ERROR_FLAGS=
elif [[ ${DCBASE} == *gdmd* ]]; then
outputFlag=-of
ERROR_FLAGS=
elif [[ ${DCBASE} == *ldc* || ${DCBASE} == *dmd* ]]; then
outputFlag=-of
ERROR_FLAGS='-verrors=0 -verror-style=gnu -vcolumns'
else
echo "Unknown compiler ${DC}"
exit 1
fi
$DC ${outputFlag}generate_tests generate_tests.d
export DC ERROR_FLAGS
./generate_tests "${1}"