From aa5b40434fe8a7dd185408d7927882af6342c7b6 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}"