From 45117876d8f2d54ea9e1e262f3d71094b1de237f Mon Sep 17 00:00:00 2001 From: Andrei Horodniceanu Date: Tue, 1 Jul 2025 22:02:50 +0300 Subject: [PATCH] tests/extra/tc_ufcs_all_kinds: support gdc 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 --- .gitignore | 2 ++ .../extra/tc_ufcs_all_kinds/generate_tests.d | 30 +++++++++---------- tests/extra/tc_ufcs_all_kinds/run.sh | 17 ++++++++++- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 57869d6..8273543 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,8 @@ stdout.txt # script-generated expected with absolute file paths tests/tc_locate_ufcs_function/expected.txt tests/tc_recursive_public_import/expected.txt +# other script-generated files +tests/extra/tc_ufcs_all_kinds/generate_tests # Dub files .dub diff --git a/tests/extra/tc_ufcs_all_kinds/generate_tests.d b/tests/extra/tc_ufcs_all_kinds/generate_tests.d index 637b241..e8a517a 100644 --- a/tests/extra/tc_ufcs_all_kinds/generate_tests.d +++ b/tests/extra/tc_ufcs_all_kinds/generate_tests.d @@ -129,29 +129,27 @@ int main(string[] args) fs.write("proc_test.d", code); - auto output = executeShell("$DC -verrors=0 -c proc_test.d").output; + auto output = executeShell("$DC -verrors=0 $ERROR_STYLE -c proc_test.d").output; size_t numErrors = 0; 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) { - if (!err.startsWith("proc_test.d(")) - continue; - err = err["proc_test.d(".length .. $]; - auto lineNo = err.parse!int; - if (!err.startsWith("): Error: ")) - continue; - err = err["): Error: ".length .. $]; - string line = lines[lineNo - 1]; - enforce(line.endsWith("();"), "Unexpected error in line " ~ lineNo.to!string); - line = line[0 .. $ - 3]; - string varName = line.findSplit(".")[0]; - string funcName = line.findSplit(".")[2]; - // writeln("variable type ", varLookup[varName], " can't call ", funcLookup[funcName]); - variableIncompatibilities[varName] ~= funcName; - numErrors++; + if (auto m = matchFirst(err, errRegex)) { + auto lineNo = to!int(m[1]); + string line = lines[lineNo - 1]; + enforce(line.endsWith("();"), "Unexpected error in line " ~ lineNo.to!string); + line = line[0 .. $ - 3]; + 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!"); diff --git a/tests/extra/tc_ufcs_all_kinds/run.sh b/tests/extra/tc_ufcs_all_kinds/run.sh index 2c5e79c..6f3bb9e 100755 --- a/tests/extra/tc_ufcs_all_kinds/run.sh +++ b/tests/extra/tc_ufcs_all_kinds/run.sh @@ -4,4 +4,19 @@ if [ -z "${DC:-}" ]; then DC=dmd fi -DC="$DC" "$DC" -run generate_tests.d "$1" +DCBASE=$(basename "${DC}") + +# Set up ERROR_STYLE to make all compilers output errors in the same +# format to make matching easier in generate_tests.d. + +if [[ ${DCBASE} =~ gdmd ]]; then + ERROR_STYLE= +elif [[ ${DCBASE} =~ dmd|ldc ]]; then + ERROR_STYLE='-verror-style=gnu -vcolumns' +else + echo "unknonwn compiler ${DC}" + exit 1 +fi + +export DC ERROR_STYLE +${DC} -run generate_tests.d "${1}"