From 3846c7602d967f47a7716411dca3b4e0e5f17f97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20H=C3=BCck?= Date: Mon, 2 Feb 2026 22:39:57 +0100 Subject: [PATCH 1/4] Presets with coverage --- .github/workflows/basic-ci.yml | 4 +- CMakePresets.json | 73 ++++++++++++++++++++++++++++++++++ cmake/ToolchainOptions.cmake | 3 +- 3 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 CMakePresets.json diff --git a/.github/workflows/basic-ci.yml b/.github/workflows/basic-ci.yml index 96c9c36..86306ae 100644 --- a/.github/workflows/basic-ci.yml +++ b/.github/workflows/basic-ci.yml @@ -94,10 +94,10 @@ jobs: - name: Build IRPrinter run: | - cmake -B build -DCMAKE_BUILD_TYPE=Debug -DLLVM_DIR=${LLVM_CMAKE_DIR} -DClang_DIR=${CLANG_CMAKE_DIR} + cmake --preset develop -DLLVM_DIR=${LLVM_CMAKE_DIR} -DClang_DIR=${CLANG_CMAKE_DIR} cmake --build build --parallel - name: Build IRPrinter release run: | - cmake -B build_rel -DCMAKE_BUILD_TYPE=Release -DLLVM_DIR=${LLVM_CMAKE_DIR} -DClang_DIR=${CLANG_CMAKE_DIR} + cmake --preset release -DLLVM_DIR=${LLVM_CMAKE_DIR} -DClang_DIR=${CLANG_CMAKE_DIR} cmake --build build_rel --parallel --target install diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..cb73115 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,73 @@ +{ + "version": 2, + "cmakeMinimumRequired": { + "major": 3, + "minor": 20, + "patch": 0 + }, + "configurePresets": [ + { + "name": "clang-toolchain", + "hidden": true, + "generator": "Unix Makefiles", + "cacheVariables": { + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++" + } + }, + { + "name": "develop", + "displayName": "Develop (Debug)", + "description": "Default develop build options for Clang", + "binaryDir": "${sourceDir}/build", + "inherits": [ + "clang-toolchain" + ], + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "release", + "displayName": "Release", + "description": "Default release build options for Clang", + "binaryDir": "${sourceDir}/build_rel", + "inherits": [ + "clang-toolchain" + ], + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "coverage", + "displayName": "Coverage (LLVM)", + "description": "Default coverage build options for Clang (LLVM-based)", + "binaryDir": "${sourceDir}/build_cov", + "inherits": [ + "clang-toolchain" + ], + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "IRPRINTER_ENABLE_COVERAGE": "ON", + "CMAKE_C_FLAGS": "-fprofile-instr-generate -fcoverage-mapping", + "CMAKE_CXX_FLAGS": "-fprofile-instr-generate -fcoverage-mapping", + "CMAKE_EXE_LINKER_FLAGS": "-fprofile-instr-generate -fcoverage-mapping" + } + } + ], + "buildPresets": [ + { + "name": "develop", + "configurePreset": "develop" + }, + { + "name": "release", + "configurePreset": "release" + }, + { + "name": "coverage", + "configurePreset": "coverage" + } + ] +} diff --git a/cmake/ToolchainOptions.cmake b/cmake/ToolchainOptions.cmake index 719e793..82e6212 100644 --- a/cmake/ToolchainOptions.cmake +++ b/cmake/ToolchainOptions.cmake @@ -27,9 +27,10 @@ include(clang-format) include(log-util) include(target-util) -set(LOG_LEVEL 0 CACHE STRING "Granularity of the logger. 3 is most verbose, 0 is least.") +set(IRPRINTER_LOG_LEVEL 0 CACHE STRING "Granularity of the logger. 3 is most verbose, 0 is least.") option(IRPRINTER_AUTO_RESOURCE_DIR "Try to automatically set the Clang resource directory" OFF) +option(IRPRINTER_ENABLE_COVERAGE "Enable LLVM-based coverage" OFF) if(IRPRINTER_AUTO_RESOURCE_DIR AND NOT IRPRINTER_CLANG_RESOURCE_DIR) find_program(CLANG_EXECUTABLE NAMES clang-${LLVM_VERSION_MAJOR} clang) From a161480fc4d3d589f82c56b7c87beebec89efad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20H=C3=BCck?= Date: Tue, 3 Feb 2026 18:25:20 +0100 Subject: [PATCH 2/4] Lit testing --- .github/workflows/basic-ci.yml | 18 +++++++---- CMakeLists.txt | 7 +++-- cmake/modules/target-util.cmake | 51 +++++++++++++++++++++++++++++++ include/Util.h | 5 ++- src/main.cpp | 2 +- src/printer/IRNodeFinder.cpp | 13 ++++++-- test/CMakeLists.txt | 54 +++++++++++++++++++++++++++++++++ test/codes/decl.cpp | 9 ++++++ test/codes/demangle.cpp | 7 +++++ test/codes/dump.cpp | 7 +++++ test/codes/errors.cpp | 11 +++++++ test/codes/flags.cpp | 8 +++++ test/codes/generate.cpp | 6 ++++ test/codes/list.cpp | 9 ++++++ test/codes/list_all.cpp | 9 ++++++ test/codes/location.cpp | 10 ++++++ test/codes/opt_flag.cpp | 8 +++++ test/codes/quit.cpp | 6 ++++ test/lit.cfg.py | 18 +++++++++++ test/lit.site.cfg.py.in | 12 ++++++++ 20 files changed, 257 insertions(+), 13 deletions(-) create mode 100644 test/CMakeLists.txt create mode 100644 test/codes/decl.cpp create mode 100644 test/codes/demangle.cpp create mode 100644 test/codes/dump.cpp create mode 100644 test/codes/errors.cpp create mode 100644 test/codes/flags.cpp create mode 100644 test/codes/generate.cpp create mode 100644 test/codes/list.cpp create mode 100644 test/codes/list_all.cpp create mode 100644 test/codes/location.cpp create mode 100644 test/codes/opt_flag.cpp create mode 100644 test/codes/quit.cpp create mode 100644 test/lit.cfg.py create mode 100644 test/lit.site.cfg.py.in diff --git a/.github/workflows/basic-ci.yml b/.github/workflows/basic-ci.yml index 86306ae..63a5043 100644 --- a/.github/workflows/basic-ci.yml +++ b/.github/workflows/basic-ci.yml @@ -92,12 +92,18 @@ jobs: echo "CLANG_CMAKE_DIR=/usr/lib/llvm-${{ matrix.llvm-version }}/lib/cmake/clang" >> $GITHUB_ENV echo "EXTERNAL_LIT=/usr/lib/llvm-${{ matrix.llvm-version }}/build/utils/lit/lit.py" >> $GITHUB_ENV - - name: Build IRPrinter - run: | - cmake --preset develop -DLLVM_DIR=${LLVM_CMAKE_DIR} -DClang_DIR=${CLANG_CMAKE_DIR} - cmake --build build --parallel - - name: Build IRPrinter release run: | - cmake --preset release -DLLVM_DIR=${LLVM_CMAKE_DIR} -DClang_DIR=${CLANG_CMAKE_DIR} + cmake --preset release -DLLVM_DIR=${LLVM_CMAKE_DIR} -DClang_DIR=${CLANG_CMAKE_DIR} -DLLVM_EXTERNAL_LIT=${EXTERNAL_LIT} cmake --build build_rel --parallel --target install + + - name: Test and Coverage + run: | + cmake --preset coverage -DLLVM_DIR=${LLVM_CMAKE_DIR} -DClang_DIR=${CLANG_CMAKE_DIR} -DLLVM_EXTERNAL_LIT=${EXTERNAL_LIT} + cmake --build build_cov --target coverage-irprinter + + - name: Upload coverage + uses: actions/upload-artifact@v6 + with: + name: coverage-report-llvm${{ matrix.llvm-version }} + path: build_cov/coverage_report/ diff --git a/CMakeLists.txt b/CMakeLists.txt index b11f139..aa7de40 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.20) +CMAKE_MINIMUM_REQUIRED(VERSION 3.21) PROJECT(irprinter - VERSION 0.3 + VERSION 0.4 ) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -24,3 +24,6 @@ irprinter_add_format_target(format-sources ) add_subdirectory(src) +if(PROJECT_IS_TOP_LEVEL) + add_subdirectory(test) +endif() \ No newline at end of file diff --git a/cmake/modules/target-util.cmake b/cmake/modules/target-util.cmake index 128b5c4..ecc8ced 100644 --- a/cmake/modules/target-util.cmake +++ b/cmake/modules/target-util.cmake @@ -37,3 +37,54 @@ function(irprinter_target_project_compile_definitions target) ) endif () endfunction() + +function(irprinter_find_llvm_progs target names) + cmake_parse_arguments(ARG "ABORT_IF_MISSING;SHOW_VAR" "DEFAULT_EXE" "HINTS" ${ARGN}) + set(TARGET_TMP ${target}) + + find_program( + ${target} + NAMES ${names} + PATHS ${LLVM_TOOLS_BINARY_DIR} + NO_DEFAULT_PATH + ) + if(NOT ${target}) + find_program( + ${target} + NAMES ${names} + HINTS ${ARG_HINTS} + ) + endif() + + if(NOT ${target}) + set(target_missing_message "") + if(ARG_DEFAULT_EXE) + unset(${target} CACHE) + set(${target} + ${ARG_DEFAULT_EXE} + CACHE + STRING + "Default value for ${TARGET_TMP}." + ) + set(target_missing_message "Using default: ${ARG_DEFAULT_EXE}") + endif() + + set(message_status STATUS) + if(ARG_ABORT_IF_MISSING AND NOT ARG_DEFAULT_EXE) + set(message_status SEND_ERROR) + endif() + message(${message_status} + "Did find LLVM program " "${names}" + " in ${LLVM_TOOLS_BINARY_DIR}, in system path or hints " "\"${ARG_HINTS}\"" ". " + ${target_missing_message} + ) + endif() + + set(${TARGET_TMP} "${${TARGET_TMP}}" PARENT_SCOPE) + + if(ARG_SHOW_VAR) + mark_as_advanced(CLEAR ${target}) + else() + mark_as_advanced(${target}) + endif() +endfunction() diff --git a/include/Util.h b/include/Util.h index d104624..d4ea526 100644 --- a/include/Util.h +++ b/include/Util.h @@ -133,7 +133,10 @@ inline llvm::SmallVector regex_find(const llvm::Module if (use_mangle) { return detail::find(m, [&](const llvm::Function& f) { return r.match(f.getName()); }); } else { - return detail::find(m, [&](const llvm::Function& f) { return r.match(try_demangle(f.getName())); }); + return detail::find(m, [&](const llvm::Function& f) { + std::string name = try_demangle(f.getName()); + return r.match(name); + }); } } diff --git a/src/main.cpp b/src/main.cpp index 4cdec3c..2536bf2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -121,4 +121,4 @@ int main(int argc, const char** argv) { } return 0; -} +} \ No newline at end of file diff --git a/src/printer/IRNodeFinder.cpp b/src/printer/IRNodeFinder.cpp index c9a369a..d526559 100644 --- a/src/printer/IRNodeFinder.cpp +++ b/src/printer/IRNodeFinder.cpp @@ -21,13 +21,20 @@ using namespace llvm; namespace irprinter { namespace { +std::string strip_parens(std::string name) { + if (name.size() > 2 && name.substr(name.size() - 2) == "()") { + name.erase(name.size() - 2); + } + return name; +} + template void applyToMatchingFunction(llvm::raw_ostream& os, const llvm::Module* m, const std::string& regex, F&& func) { const auto fvec = util::regex_find(*m, regex); unsigned count{0}; for (auto f : fvec) { auto fname = f->getName(); - os << "Match " << ++count << " [" << util::try_demangle(fname) << "]:"; + os << "Match " << ++count << " [" << strip_parens(util::try_demangle(fname)) << "]:"; func(f); os << "\n"; } @@ -101,7 +108,7 @@ void IRNodeFinder::listFunction(const std::string& regex) const { oss.flush(); if (f->isDeclaration()) { - os << "\n" << s.substr(1); + os << "\n" << s; } else { llvm::Regex r("((;|define)[^{]+){"); SmallVector match; @@ -114,7 +121,7 @@ void IRNodeFinder::listFunction(const std::string& regex) const { } std::string IRNodeFinder::demangle(const std::string& name) { - return util::try_demangle(name); + return strip_parens(util::try_demangle(name)); } } /* namespace irprinter */ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..2049198 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,54 @@ +set(LLVM_IR_PRINTER_BINARY $) + +irprinter_find_llvm_progs(IRPRINTER_FILECHECK_EXEC "FileCheck-${LLVM_VERSION_MAJOR};FileCheck") + +if(LLVM_EXTERNAL_LIT) + cmake_path(GET LLVM_EXTERNAL_LIT PARENT_PATH LLVM_EXTERNAL_LIT_DIR) +endif() +irprinter_find_llvm_progs(IRPRINTER_LIT_EXEC + "llvm-lit;lit;lit.py" + HINTS ${LLVM_EXTERNAL_LIT_DIR} /usr/lib/llvm-${LLVM_VERSION_MAJOR} /usr/lib/llvm /usr/bin /usr/local/bin /opt/local/bin + ABORT_IF_MISSING +) + +add_custom_target(check-irprinter + COMMAND ${IRPRINTER_LIT_EXEC} -vv ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS llvm-ir-printer${EXE_SUFFIX} + COMMENT "Running irprinter regression tests" + USES_TERMINAL +) + +if(IRPRINTER_ENABLE_COVERAGE) + set(COVERAGE_DIR ${CMAKE_BINARY_DIR}/coverage_report) + irprinter_find_llvm_progs(IRPRINTER_PROFDATA_EXEC "llvm-profdata-${LLVM_VERSION_MAJOR};llvm-profdata") + irprinter_find_llvm_progs(IRPRINTER_COV_EXEC "llvm-cov-${LLVM_VERSION_MAJOR};llvm-cov") + + set(IGNORE_REGEX ".*(test|build|build_cov|external).*") + + add_custom_target(coverage-irprinter + COMMAND ${CMAKE_COMMAND} -E make_directory ${COVERAGE_DIR} + COMMAND ${CMAKE_COMMAND} -E rm -f "${CMAKE_CURRENT_BINARY_DIR}/*.profraw" "${CMAKE_CURRENT_BINARY_DIR}/merged.profdata" + # Execute tests + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target check-irprinter + # Merge all profraw files + COMMAND ${CMAKE_COMMAND} -E env bash -c "${IRPRINTER_PROFDATA_EXEC} merge -sparse ${CMAKE_CURRENT_BINARY_DIR}/*.profraw -o ${CMAKE_CURRENT_BINARY_DIR}/merged.profdata" + # Generate HTML + COMMAND ${IRPRINTER_COV_EXEC} show "${LLVM_IR_PRINTER_BINARY}" + "-instr-profile=${CMAKE_CURRENT_BINARY_DIR}/merged.profdata" + -format=html + "-output-dir=${COVERAGE_DIR}" + -show-line-counts-or-regions + "-ignore-filename-regex=${IGNORE_REGEX}" + # Show summary + COMMAND ${IRPRINTER_COV_EXEC} report "${LLVM_IR_PRINTER_BINARY}" + "-instr-profile=${CMAKE_CURRENT_BINARY_DIR}/merged.profdata" + "-ignore-filename-regex=${IGNORE_REGEX}" + COMMENT "Generating coverage report" + DEPENDS check-irprinter + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + VERBATIM + ) +endif() + +configure_file(lit.site.cfg.py.in lit.site.cfg.py.tmp @ONLY) +file(GENERATE OUTPUT lit.site.cfg.py INPUT ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py.tmp) \ No newline at end of file diff --git a/test/codes/decl.cpp b/test/codes/decl.cpp new file mode 100644 index 0000000..c371f71 --- /dev/null +++ b/test/codes/decl.cpp @@ -0,0 +1,9 @@ +// RUN: echo "l printf" | %llvm-ir-printer %s -- | %filecheck %s + +// CHECK: Match 1 [printf]: +// CHECK-NEXT: declare i32 @printf +extern "C" int printf(const char*, ...); +int main() { + printf("test"); + return 0; +} \ No newline at end of file diff --git a/test/codes/demangle.cpp b/test/codes/demangle.cpp new file mode 100644 index 0000000..25d5d14 --- /dev/null +++ b/test/codes/demangle.cpp @@ -0,0 +1,7 @@ +// RUN: echo "d _Z3foov" | %llvm-ir-printer %s -- | %filecheck %s + +// CHECK: Demangled name: foo +void foo() {} +int main() { + return 0; +} \ No newline at end of file diff --git a/test/codes/dump.cpp b/test/codes/dump.cpp new file mode 100644 index 0000000..fd37149 --- /dev/null +++ b/test/codes/dump.cpp @@ -0,0 +1,7 @@ +// RUN: echo "dump" | %llvm-ir-printer %s -- | %filecheck %s + +// CHECK: source_filename = "{{.*}}dump.cpp" +// CHECK: define {{.*}} @main +int main() { + return 0; +} diff --git a/test/codes/errors.cpp b/test/codes/errors.cpp new file mode 100644 index 0000000..7043e9c --- /dev/null +++ b/test/codes/errors.cpp @@ -0,0 +1,11 @@ +// RUN: echo "10 5" | %llvm-ir-printer %s -- | %filecheck %s --check-prefix=LOC-ORDER +// RUN: echo "5 invalid" | %llvm-ir-printer %s -- | %filecheck %s --check-prefix=LOC-PARSE +// RUN: echo "l [" | %llvm-ir-printer %s -- | %filecheck %s --check-prefix=REGEX-ERR + +// LOC-ORDER: Error: end location (5) is less than start location (10) +// LOC-PARSE: Invalid end location: invalid +// REGEX-ERR: Invalid regex ({{.*}}): "[" + +int main() { + return 0; +} diff --git a/test/codes/flags.cpp b/test/codes/flags.cpp new file mode 100644 index 0000000..b48c30b --- /dev/null +++ b/test/codes/flags.cpp @@ -0,0 +1,8 @@ +// RUN: echo -e "f -Wall\nf -O3\np main" | %llvm-ir-printer %s -- | %filecheck %s + +// CHECK: Set flag to -Wall +// CHECK: Set flag to -O3 +// CHECK: define {{.*}} @main +int main() { + return 0; +} diff --git a/test/codes/generate.cpp b/test/codes/generate.cpp new file mode 100644 index 0000000..df8518d --- /dev/null +++ b/test/codes/generate.cpp @@ -0,0 +1,6 @@ +// RUN: echo "g" | %llvm-ir-printer %s -- | %filecheck %s +// Without "-f -g" no effect, but no explicit error either. +// CHECK-NOT: Error +int main() { + return 0; +} diff --git a/test/codes/list.cpp b/test/codes/list.cpp new file mode 100644 index 0000000..4c85d5c --- /dev/null +++ b/test/codes/list.cpp @@ -0,0 +1,9 @@ +// RUN: echo "l foo" | %llvm-ir-printer %s -- | %filecheck %s + +// CHECK: _Z3foov +// CHECK-NOT: main +void foo() { +} +int main() { + return 0; +} \ No newline at end of file diff --git a/test/codes/list_all.cpp b/test/codes/list_all.cpp new file mode 100644 index 0000000..622ac2f --- /dev/null +++ b/test/codes/list_all.cpp @@ -0,0 +1,9 @@ +// RUN: echo "l" | %llvm-ir-printer %s -- | %filecheck %s + +// CHECK: Match 1 [foo] +// CHECK: Match 2 [main] +void foo() { +} +int main() { + return 0; +} \ No newline at end of file diff --git a/test/codes/location.cpp b/test/codes/location.cpp new file mode 100644 index 0000000..62afb37 --- /dev/null +++ b/test/codes/location.cpp @@ -0,0 +1,10 @@ +// RUN: echo "6 10" | %llvm-ir-printer %s -- -g | %filecheck %s + +// CHECK: main: +// CHECK: store i32 1, ptr {{.*}} +// CHECK: store i32 2, ptr {{.*}} +int main() { + int a = 1; + int b = 2; + return a + b; +} \ No newline at end of file diff --git a/test/codes/opt_flag.cpp b/test/codes/opt_flag.cpp new file mode 100644 index 0000000..2bdd39e --- /dev/null +++ b/test/codes/opt_flag.cpp @@ -0,0 +1,8 @@ +// RUN: echo -e "f -O3\np main" | %llvm-ir-printer %s -- | %filecheck %s + +// CHECK: Set flag to -O3. Re-generating module... +// CHECK: define {{.*}} @main{{.*}} +// CHECK-NOT: optnone +int main() { + return 0; +} diff --git a/test/codes/quit.cpp b/test/codes/quit.cpp new file mode 100644 index 0000000..77b9333 --- /dev/null +++ b/test/codes/quit.cpp @@ -0,0 +1,6 @@ +// RUN: echo "q" | %llvm-ir-printer %s -- | %filecheck %s + +// CHECK-NOT: ir-printer> +int main() { + return 0; +} diff --git a/test/lit.cfg.py b/test/lit.cfg.py new file mode 100644 index 0000000..27a4483 --- /dev/null +++ b/test/lit.cfg.py @@ -0,0 +1,18 @@ +import lit.formats +import os + +config.name = 'LLVM-IR-PRINTER' +config.test_format = lit.formats.ShTest(execute_external=True) + +config.suffixes = ['.cpp', '.c', '.ll'] + +config.test_source_root = os.path.dirname(__file__) + +# Substitutions +config.substitutions.append(('%llvm-ir-printer', config.llvm_ir_printer_binary)) +config.substitutions.append(('%filecheck', config.filecheck_binary)) +config.substitutions.append(('%llvm-profdata', config.llvm_profdata_exe)) +config.substitutions.append(('%llvm-cov', config.llvm_cov_exe)) + +if config.enable_coverage.upper() in ['ON', 'YES', 'TRUE', '1']: + config.environment['LLVM_PROFILE_FILE'] = os.path.join(config.test_exec_root, "test-%p.profraw") diff --git a/test/lit.site.cfg.py.in b/test/lit.site.cfg.py.in new file mode 100644 index 0000000..fefd331 --- /dev/null +++ b/test/lit.site.cfg.py.in @@ -0,0 +1,12 @@ +import os + +config.llvm_ir_printer_binary = "@LLVM_IR_PRINTER_BINARY@" +config.filecheck_binary = "@IRPRINTER_FILECHECK_EXEC@" +config.llvm_profdata_exe = "@IRPRINTER_PROFDATA_EXEC@" +config.llvm_cov_exe = "@IRPRINTER_COV_EXEC@" +config.enable_coverage = "@IRPRINTER_ENABLE_COVERAGE@" +config.test_source_root = "@CMAKE_CURRENT_SOURCE_DIR@" +config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@" + +# Let the main config do the real work. +lit_config.load_config(config, os.path.join(config.test_source_root, "lit.cfg.py")) \ No newline at end of file From ee101c52589a72c3eaccdf55e47e7918c4673982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20H=C3=BCck?= Date: Tue, 3 Feb 2026 19:51:47 +0100 Subject: [PATCH 3/4] Fixes --- test/codes/demangle.cpp | 3 ++- test/codes/location.cpp | 2 ++ test/lit.cfg.py | 3 +++ test/lit.site.cfg.py.in | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/test/codes/demangle.cpp b/test/codes/demangle.cpp index 25d5d14..e5bad11 100644 --- a/test/codes/demangle.cpp +++ b/test/codes/demangle.cpp @@ -1,7 +1,8 @@ // RUN: echo "d _Z3foov" | %llvm-ir-printer %s -- | %filecheck %s // CHECK: Demangled name: foo -void foo() {} +void foo() { +} int main() { return 0; } \ No newline at end of file diff --git a/test/codes/location.cpp b/test/codes/location.cpp index 62afb37..e016f40 100644 --- a/test/codes/location.cpp +++ b/test/codes/location.cpp @@ -1,5 +1,7 @@ // RUN: echo "6 10" | %llvm-ir-printer %s -- -g | %filecheck %s +// REQUIRES: llvm-21 + // CHECK: main: // CHECK: store i32 1, ptr {{.*}} // CHECK: store i32 2, ptr {{.*}} diff --git a/test/lit.cfg.py b/test/lit.cfg.py index 27a4483..f0818f6 100644 --- a/test/lit.cfg.py +++ b/test/lit.cfg.py @@ -8,6 +8,9 @@ config.test_source_root = os.path.dirname(__file__) +if config.llvm_version: + config.available_features.add(f"llvm-{config.llvm_version}") + # Substitutions config.substitutions.append(('%llvm-ir-printer', config.llvm_ir_printer_binary)) config.substitutions.append(('%filecheck', config.filecheck_binary)) diff --git a/test/lit.site.cfg.py.in b/test/lit.site.cfg.py.in index fefd331..24c848b 100644 --- a/test/lit.site.cfg.py.in +++ b/test/lit.site.cfg.py.in @@ -7,6 +7,7 @@ config.llvm_cov_exe = "@IRPRINTER_COV_EXEC@" config.enable_coverage = "@IRPRINTER_ENABLE_COVERAGE@" config.test_source_root = "@CMAKE_CURRENT_SOURCE_DIR@" config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@" +config.llvm_version = "@LLVM_VERSION_MAJOR@" # Let the main config do the real work. lit_config.load_config(config, os.path.join(config.test_source_root, "lit.cfg.py")) \ No newline at end of file From addd865b334ffa1399467b387fce3ddd01089bcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20H=C3=BCck?= Date: Tue, 3 Feb 2026 19:55:27 +0100 Subject: [PATCH 4/4] Remove llvm-18 testing --- .github/workflows/basic-ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/basic-ci.yml b/.github/workflows/basic-ci.yml index 63a5043..f4a7574 100644 --- a/.github/workflows/basic-ci.yml +++ b/.github/workflows/basic-ci.yml @@ -57,9 +57,6 @@ jobs: - llvm-version: 14 os: ubuntu-22.04 preset: develop - - llvm-version: 18 - os: ubuntu-24.04 - preset: develop - llvm-version: 21 os: ubuntu-24.04 preset: develop