Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package cvise for openSUSE:Factory checked 
in at 2026-08-06 16:24:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cvise (Old)
 and      /work/SRC/openSUSE:Factory/.cvise.new.16738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "cvise"

Thu Aug  6 16:24:39 2026 rev:87 rq:1369707 version:2.12.0+git.20260702.78bba5d

Changes:
--------
--- /work/SRC/openSUSE:Factory/cvise/cvise.changes      2026-06-28 
21:07:45.896562504 +0200
+++ /work/SRC/openSUSE:Factory/.cvise.new.16738/cvise.changes   2026-08-06 
16:26:31.917511074 +0200
@@ -1,0 +2,21 @@
+Wed Aug  5 06:45:03 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to version 2.12.0+git.20260702.78bba5d:
+  * test_manager: fix empty-jobs deadlock on state exhaustion, which
+    made test_dir_linker_duplicate_var_error hang on single-core
+    machines (boo#1268265)
+- Drop test_dir_linker_duplicate_2threads.patch: the single-core hang
+  it worked around is fixed upstream
+- Add cvise-test-interleaving-deterministic-reduction.patch: pin the
+  interestingness test of test_interleaving_lines_passes to
+  -Werror=implicit-function-declaration. Without it the test has two
+  admissible reductions on GCC <= 13, which both Leap 16.0 and 16.1
+  ship, and the interleaved passes race between them (boo#1273590)
+- Drop the obsolete suse_version < 1550 conditionals: cvise needs
+  python3 >= 3.8 while SLE-15/Leap 15.x ship python 3.6, so it cannot
+  build there at all and the gcc11 fallback was dead code
+- Drop unused ncurses-devel BuildRequires: nothing in the tree
+  references curses and the build links neither -lncurses nor -ltinfo
+- Use %autosetup
+
+-------------------------------------------------------------------

Old:
----
  cvise-2.12.0+git.20260624.82a22c61.tar.xz
  test_dir_linker_duplicate_2threads.patch

New:
----
  cvise-2.12.0+git.20260702.78bba5d.tar.xz
  cvise-test-interleaving-deterministic-reduction.patch

----------(Old B)----------
  Old:    machines (boo#1268265)
- Drop test_dir_linker_duplicate_2threads.patch: the single-core hang
  it worked around is fixed upstream
----------(Old E)----------

----------(New B)----------
  New:  it worked around is fixed upstream
- Add cvise-test-interleaving-deterministic-reduction.patch: pin the
  interestingness test of test_interleaving_lines_passes to
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ cvise.spec ++++++
--- /var/tmp/diff_new_pack.yOZH3P/_old  2026-08-06 16:26:32.477530626 +0200
+++ /var/tmp/diff_new_pack.yOZH3P/_new  2026-08-06 16:26:32.481530766 +0200
@@ -17,25 +17,24 @@
 
 
 Name:           cvise
-Version:        2.12.0+git.20260624.82a22c61
+Version:        2.12.0+git.20260702.78bba5d
 Release:        0
 Summary:        Super-parallel Python port of the C-Reduce
 License:        BSD-3-Clause
 URL:            https://github.com/marxin/cvise
 Source:         %{name}-%{version}.tar.xz
+# PATCH-FIX-UPSTREAM cvise-tree-sitter-cpp-aarch64-sign-compare.patch 
[email protected] -- fix -Werror=sign-compare in the bundled tree-sitter-cpp 
scanner on aarch64 (wchar_t is unsigned there), 
https://github.com/tree-sitter/tree-sitter-cpp/issues/338
+Patch1:         cvise-tree-sitter-cpp-aarch64-sign-compare.patch
+# PATCH-FIX-UPSTREAM cvise-test-interleaving-deterministic-reduction.patch 
[email protected] -- test_interleaving_lines_passes has two admissible 
reductions on GCC <= 13 (Leap 16.x) and races between them, 
https://github.com/marxin/cvise/pull/513
+Patch2:         cvise-test-interleaving-deterministic-reduction.patch
 BuildRequires:  astyle
 BuildRequires:  clang-devel
 BuildRequires:  cmake
 BuildRequires:  flex
-%if %{suse_version} < 1550
-BuildRequires:  gcc11-c++
-%else
 BuildRequires:  gcc-c++
-BuildRequires:  mold
-%endif
 BuildRequires:  indent
 BuildRequires:  llvm-devel
-BuildRequires:  ncurses-devel
+BuildRequires:  mold
 BuildRequires:  procps
 BuildRequires:  python3 >= 3.8
 BuildRequires:  python3-Pebble
@@ -61,13 +60,7 @@
 Requires:       python3-zstandard
 Requires:       unifdef
 
-# Workaround bsc#1268265
-Patch1:         test_dir_linker_duplicate_2threads.patch
-# Fix -Werror=sign-compare in bundled tree-sitter-cpp scanner on aarch64 
(wchar_t is unsigned there); 
https://github.com/tree-sitter/tree-sitter-cpp/issues/338
-Patch2:         cvise-tree-sitter-cpp-aarch64-sign-compare.patch
-
 %description
-
 C-Vise is a super-parallel Python port of the C-Reduce. The port is fully
 compatible to the C-Reduce and uses the same efficient
 LLVM-based C/C++ reduction tool named clang_delta.
@@ -79,17 +72,10 @@
 and report bugs in compilers and other tools that process C/C++ or OpenCL code.
 
 %prep
-%setup -q
-%autopatch -p1
+%autosetup -p1
 
 %build
-%if %{suse_version} < 1550
-export CC=gcc-11
-export CXX=g++-11
-%else
 %global optflags %{optflags} -fuse-ld=mold
-%endif
-
 %cmake -DCMAKE_INSTALL_LIBEXECDIR=%{_libexecdir}
 %cmake_build
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.yOZH3P/_old  2026-08-06 16:26:32.561533559 +0200
+++ /var/tmp/diff_new_pack.yOZH3P/_new  2026-08-06 16:26:32.565533699 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/marxin/cvise</param>
-              <param 
name="changesrevision">82a22c61f66896f8661926a28350b1e5d49c3771</param></service></servicedata>
+              <param 
name="changesrevision">78bba5d00ee6a046e77789e016bb55d0a92b8c29</param></service></servicedata>
 (No newline at EOF)
 

++++++ cvise-2.12.0+git.20260624.82a22c61.tar.xz -> 
cvise-2.12.0+git.20260702.78bba5d.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/cvise-2.12.0+git.20260624.82a22c61/.github/actions/setup-opensuse/action.yml
 new/cvise-2.12.0+git.20260702.78bba5d/.github/actions/setup-opensuse/action.yml
--- 
old/cvise-2.12.0+git.20260624.82a22c61/.github/actions/setup-opensuse/action.yml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/cvise-2.12.0+git.20260702.78bba5d/.github/actions/setup-opensuse/action.yml 
    2026-07-02 01:42:04.000000000 +0200
@@ -0,0 +1,25 @@
+name: "Setup openSUSE Tumbleweed Snapshot"
+description: "Configures zypper to use a stable historical snapshot to bypass 
CDN flakiness"
+runs:
+  using: "composite"
+  steps:
+    - name: Fetch latest stable snapshot date
+      uses: actions/github-script@v9
+      id: get-snapshot
+      with:
+        script: |
+          const response = await 
fetch("https://openqa.opensuse.org/api/v1/job_groups/1/build_results";);
+          const data = await response.json();
+          // Use index 2 (the 3rd most recent snapshot, roughly 2-3 days old)
+          // to ensure all global mirrors have fully synced the RPM packages.
+          // This avoids 404s/timeouts on regional mirrors that lag behind
+          // live releases.
+          return data.build_results[2].build;
+        result-encoding: string
+    - name: Setup openSUSE snapshot repository
+      shell: bash
+      run: |
+        SNAPSHOT="${{ steps.get-snapshot.outputs.result }}"
+        echo "Using snapshot: $SNAPSHOT"
+        zypper rr --all
+        zypper ar -f 
http://download.opensuse.org/history/$SNAPSHOT/tumbleweed/repo/oss/ repo-oss
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/cvise-2.12.0+git.20260624.82a22c61/.github/workflows/build-llvm-nightly.yml 
new/cvise-2.12.0+git.20260702.78bba5d/.github/workflows/build-llvm-nightly.yml
--- 
old/cvise-2.12.0+git.20260624.82a22c61/.github/workflows/build-llvm-nightly.yml 
    2026-06-24 01:58:22.000000000 +0200
+++ 
new/cvise-2.12.0+git.20260702.78bba5d/.github/workflows/build-llvm-nightly.yml  
    2026-07-02 01:42:04.000000000 +0200
@@ -29,6 +29,8 @@
       - run: ${{ env.RETRY }} apt-get update
       - run: ${{ env.RETRY }} apt-get -qq install -y gcc g++ wget lsb-release 
wget software-properties-common gnupg git cmake flex mawk python3-pebble 
python3-psutil python3-chardet python3-msgspec python3-pytest 
python3-pytest-mock python3-pytest-subprocess python3-jsonschema 
python3-zstandard vim unifdef sudo
       - uses: rui314/setup-mold@v1
+        with:
+          make-default: false
       - run: ld --version
       - run: nproc
       - run: ${{ env.RETRY }} wget https://apt.llvm.org/llvm.sh
@@ -39,7 +41,7 @@
       - run: touch /usr/lib/llvm-22/lib/libLibcTableGenUtil.a
       - uses: actions/checkout@v6
       - run: mkdir objdir
-      - run: cmake ..
+      - run: cmake .. -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" 
-DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=mold"
         working-directory: objdir
       - run: make -j`nproc` VERBOSE=1
         working-directory: objdir
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/cvise-2.12.0+git.20260624.82a22c61/.github/workflows/build.yml 
new/cvise-2.12.0+git.20260702.78bba5d/.github/workflows/build.yml
--- old/cvise-2.12.0+git.20260624.82a22c61/.github/workflows/build.yml  
2026-06-24 01:58:22.000000000 +0200
+++ new/cvise-2.12.0+git.20260702.78bba5d/.github/workflows/build.yml   
2026-07-02 01:42:04.000000000 +0200
@@ -42,6 +42,9 @@
       image: opensuse/tumbleweed
 
     steps:
+    - uses: actions/checkout@v6
+    - name: Setup openSUSE snapshot repository
+      uses: ./.github/actions/setup-opensuse
     - run: |
         ${{ env.RETRY }} zypper -n install \
           binutils clang${{ matrix.llvm }}-devel cmake flex gcc-c++ llvm${{ 
matrix.llvm }}-devel \
@@ -51,14 +54,15 @@
     - run: ${{ env.RETRY }} zypper -n install sqlite-devel python3
     - run: ${{ env.RETRY }} pip install --break-system-packages pytest-cov
     - uses: rui314/setup-mold@v1
+      with:
+        make-default: false
     - run: ld --version
     - run: nproc
-    - uses: actions/checkout@v6
     - name: build
       run: |
             mkdir objdir
             cd objdir
-            ${{ matrix.env }} cmake .. -DCMAKE_BUILD_TYPE=${{ 
matrix.build-type }} -DCMAKE_CXX_FLAGS=${{ matrix.extra-flags }}
+            ${{ matrix.env }} cmake .. -DCMAKE_BUILD_TYPE=${{ 
matrix.build-type }} -DCMAKE_CXX_FLAGS="${{ matrix.extra-flags }}" 
-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" 
-DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=mold"
             make -j`nproc` VERBOSE=1
     - name: test
       run: pytest
@@ -98,12 +102,13 @@
           - "3.13"
           - "3.14"
           - "3.14t"
+          - "3.15-dev"
       fail-fast: false
 
     steps:
     - uses: actions/checkout@v6
     - run: ${{ env.RETRY }} apt-get update
-    - run: ${{ env.RETRY }} apt-get -qq install -y gcc g++ wget lsb-release 
software-properties-common gnupg git cmake flex vim unifdef sudo
+    - run: ${{ env.RETRY }} apt-get -qq install -y gcc g++ wget lsb-release 
software-properties-common gnupg git cmake flex vim unifdef sudo libffi-dev
     - run: chown -R $(whoami) /github/home  # workaround for "directory ... 
pip ... is not owned or is not writable by the current user"
     - run: rm -rf /__t/Python  # workaround for "error when attempting to 
execute the process ... pip"
     - uses: actions/setup-python@v6
@@ -129,8 +134,10 @@
       image: opensuse/tumbleweed
 
     steps:
-    - run: ${{ env.RETRY }} zypper -n install python3-pip
     - uses: actions/checkout@v6
+    - name: Setup openSUSE snapshot repository
+      uses: ./.github/actions/setup-opensuse
+    - run: ${{ env.RETRY }} zypper -n install python3-pip
     - run: ${{ env.RETRY }} pip install --break-system-packages ruff
     - run: ruff check
     - run: ruff format --diff
@@ -142,8 +149,10 @@
       image: opensuse/tumbleweed
 
     steps:
-    - run: ${{ env.RETRY }} zypper -n install binutils clang-devel cmake flex 
gcc-c++ llvm-devel python312
     - uses: actions/checkout@v6
+    - name: Setup openSUSE snapshot repository
+      uses: ./.github/actions/setup-opensuse
+    - run: ${{ env.RETRY }} zypper -n install binutils clang-devel cmake flex 
gcc-c++ llvm-devel python312
     - name: prepare venv
       # Pytype currently only supports Python <=3.12
       run: |
@@ -169,13 +178,15 @@
       image: opensuse/tumbleweed
 
     steps:
+    - uses: actions/checkout@v6
+    - name: Setup openSUSE snapshot repository
+      uses: ./.github/actions/setup-opensuse
     - run: |
         ${{ env.RETRY }} zypper -n install \
           binutils clang-devel cmake flex gcc-c++ llvm-devel python3 
python3-pyright \
           python3-Pebble python3-pytest python3-pytest-mock 
python3-pytest-subprocess \
           unifdef python3-psutil curl git python3-chardet findutils sudo wget 
python3-jsonschema \
           python3-msgspec python3-zstandard
-    - uses: actions/checkout@v6
     - run: mkdir objdir
     - run: cmake ..
       working-directory: objdir
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/cvise-2.12.0+git.20260624.82a22c61/cvise/tests/test_test_manager.py 
new/cvise-2.12.0+git.20260702.78bba5d/cvise/tests/test_test_manager.py
--- old/cvise-2.12.0+git.20260624.82a22c61/cvise/tests/test_test_manager.py     
2026-06-24 01:58:22.000000000 +0200
+++ new/cvise-2.12.0+git.20260702.78bba5d/cvise/tests/test_test_manager.py      
2026-07-02 01:42:04.000000000 +0200
@@ -13,7 +13,7 @@
 import pytest
 
 from cvise.passes.abstract import AbstractPass, PassResult  # noqa: E402
-from cvise.passes.hint_based import HintBasedPass  # noqa: E402
+from cvise.passes.hint_based import HintBasedPass, HintState  # noqa: E402
 from cvise.utils import sigmonitor, statistics, testing  # noqa: E402
 from cvise.utils.fileutil import filter_files_by_patterns
 from cvise.utils.hint import Hint, HintBundle, Patch
@@ -23,7 +23,7 @@
 baz
 """
 
-PARALLEL_TESTS = 10
+DEFAULT_PARALLEL_TESTS = 10
 
 
 class StubPass(AbstractPass):
@@ -291,7 +291,23 @@
 
 
 @pytest.fixture
-def manager(tmp_path: Path, input_path: Path, interestingness_script: str, 
job_timeout: int, print_diff: bool):
+def parallel_tests() -> int:
+    """The default parallel_tests parameter.
+
+    Can be overridden in particular tests.
+    """
+    return DEFAULT_PARALLEL_TESTS
+
+
[email protected]
+def manager(
+    tmp_path: Path,
+    input_path: Path,
+    interestingness_script: str,
+    job_timeout: int,
+    print_diff: bool,
+    parallel_tests: int,
+):
     SAVE_TEMPS = False
     NO_CACHE = False
     SKIP_KEY_OFF = True  # tests shouldn't listen to keyboard
@@ -317,7 +333,7 @@
         job_timeout,
         SAVE_TEMPS,
         [input_path],
-        PARALLEL_TESTS,
+        parallel_tests,
         NO_CACHE,
         SKIP_KEY_OFF,
         SHADDAP,
@@ -412,7 +428,7 @@
     manager.run_passes([p], interleaving=False)
     assert extra_dir_count() >= manager.MAX_TIMEOUTS
     # we should've stopped soon after MAX_TIMEOUTS, at worst a batch of jobs 
later.
-    assert extra_dir_count() <= 2 * max(manager.MAX_TIMEOUTS, PARALLEL_TESTS)
+    assert extra_dir_count() <= 2 * max(manager.MAX_TIMEOUTS, 
DEFAULT_PARALLEL_TESTS)
 
 
 def test_interleaving_letter_removals(input_path: Path, manager):
@@ -429,7 +445,7 @@
 
 
 @pytest.mark.skipif(os.name != 'posix', reason='requires POSIX for 
command-line tools')
[email protected]('input_contents', ['ababacac' * PARALLEL_TESTS])
[email protected]('input_contents', ['ababacac' * 
DEFAULT_PARALLEL_TESTS])
 @pytest.mark.parametrize('interestingness_script', [r"grep a {test_case} && ! 
grep '\(.\)\1' {test_case}"])
 def test_interleaving_letter_removals_large(input_path: Path, manager):
     """Test that multiple passes executed in interleaving way can delete all 
but one character.
@@ -452,7 +468,9 @@
 @pytest.mark.parametrize('interestingness_script', [r'false {test_case}'])
 def test_interleaving_round_robin_transforms(manager: testing.TestManager):
     tracing_queue = multiprocessing.Manager().Queue()
-    passes = [TracingHintPass(tracing_queue, letters_to_remove=chr(ord('a') + 
i)) for i in range(PARALLEL_TESTS)]
+    passes = [
+        TracingHintPass(tracing_queue, letters_to_remove=chr(ord('a') + i)) 
for i in range(DEFAULT_PARALLEL_TESTS)
+    ]
     manager.run_passes(passes, interleaving=True)
 
     transform_calls = []
@@ -460,12 +478,12 @@
         transform_calls.append(tracing_queue.get())
 
     # all passes should've gotten equal number of jobs
-    execs_per_pass = [transform_calls.count(str(i)) for i in 
range(PARALLEL_TESTS)]
+    execs_per_pass = [transform_calls.count(str(i)) for i in 
range(DEFAULT_PARALLEL_TESTS)]
     assert min(execs_per_pass) == max(execs_per_pass)
     # we cannot assert the ideal round-robin order (like 123..N123..) because 
concurrent writes to the queue are racy,
     # but at least it's almost guaranteed that no pass should be recorded N 
times in a row.
-    for i in range(len(transform_calls) - PARALLEL_TESTS + 1):
-        slice = transform_calls[i : i + PARALLEL_TESTS]
+    for i in range(len(transform_calls) - DEFAULT_PARALLEL_TESTS + 1):
+        slice = transform_calls[i : i + DEFAULT_PARALLEL_TESTS]
         assert min(slice) != max(slice)
 
 
@@ -637,3 +655,39 @@
         assert stat.worked + stat.failed <= stat.totally_executed
     elapsed = time.monotonic() - start_time
     assert sum(stat.total_seconds for stat in stats) <= elapsed
+
+
+class MockHintState(HintState):
+    def subset_of(self, other: HintState) -> bool:
+        # We only want to skip state 2 if state 1 has already succeeded
+        return self.ptr == 2 and other.ptr == 1
+
+    def real_chunk(self) -> int:
+        return 1
+
+
+class StateSkippingPass(AbstractPass):
+    """A pass that triggers the subset skipping logic, causing its state to 
exhaust unexpectedly."""
+
+    def new(self, test_case: Path, *args, **kwargs) -> MockHintState:
+        return MockHintState(tmp_dir=Path(), per_type_states=(), ptr=1, 
special_hints=())
+
+    def advance(self, test_case: Path, state: MockHintState) -> MockHintState 
| None:
+        if state.ptr == 1:
+            return MockHintState(tmp_dir=Path(), per_type_states=(), ptr=2, 
special_hints=())
+        return None
+
+    def advance_on_success(self, test_case: Path, state: MockHintState, *args, 
**kwargs) -> MockHintState | None:
+        return self.advance(test_case, state)
+
+    def transform(self, test_case: Path, state: MockHintState, *args, 
**kwargs) -> tuple[PassResult, MockHintState]:
+        with open(test_case, 'a') as f:
+            f.write(f'modification {state.ptr}\n')
+        return (PassResult.OK, state)
+
+
[email protected]('parallel_tests', [1])
+def test_scheduler_deadlock_on_empty_jobs(input_path: Path, manager: 
testing.TestManager):
+    """Verifies that the orchestrator avoids deadlock when subset-skipping 
exhausts remaining states."""
+
+    manager.run_passes([StateSkippingPass()], interleaving=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/cvise-2.12.0+git.20260624.82a22c61/cvise/utils/testing.py 
new/cvise-2.12.0+git.20260702.78bba5d/cvise/utils/testing.py
--- old/cvise-2.12.0+git.20260624.82a22c61/cvise/utils/testing.py       
2026-06-24 01:58:22.000000000 +0200
+++ new/cvise-2.12.0+git.20260702.78bba5d/cvise/utils/testing.py        
2026-07-02 01:42:04.000000000 +0200
@@ -913,6 +913,11 @@
             while len(self.jobs) < self.parallel_tests and 
self.maybe_schedule_job():
                 pass
 
+            if not self.jobs:
+                # If maybe_schedule_job() couldn't schedule any work (e.g. 
because states were exhausted)
+                # and there are no active jobs left, we must break to avoid a 
deadlock in wait().
+                break
+
             # no more jobs could be scheduled at the moment - wait for some 
results
             wait(
                 [j.future for j in self.jobs] + [sigmonitor.get_future()],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/cvise-2.12.0+git.20260624.82a22c61/tests/test_cvise.py 
new/cvise-2.12.0+git.20260702.78bba5d/tests/test_cvise.py
--- old/cvise-2.12.0+git.20260624.82a22c61/tests/test_cvise.py  2026-06-24 
01:58:22.000000000 +0200
+++ new/cvise-2.12.0+git.20260702.78bba5d/tests/test_cvise.py   2026-07-02 
01:42:04.000000000 +0200
@@ -283,7 +283,8 @@
     assert (test_case / 'a.cc').read_text() == '#include "a.h"\nint nextHi = 
x;\n'
 
 
-def test_dir_linker_duplicate_var_error(tmp_path: Path, 
overridden_subprocess_tmpdir: Path):
[email protected]('extra_args', [[], ['-n', '1']], 
ids=['default_cores', 'single_core'])
+def test_dir_linker_duplicate_var_error(tmp_path: Path, 
overridden_subprocess_tmpdir: Path, extra_args: list[str]):
     """Test reducing headers and a makefile for a link-time error due to 
duplicate variables.
 
     Here we had to hardcode particular error messages from real linkers.
@@ -320,7 +321,8 @@
             f"(LC_ALL=C make -C repro 2>&1 || true) | awk '{{ print }} 
/{ERROR_REGEX}/ {{ y=1 }} END {{ exit !y }}'",
             'repro',
             '--tidy',
-        ],
+        ]
+        + extra_args,
         tmp_path,
         overridden_subprocess_tmpdir,
     )

++++++ cvise-test-interleaving-deterministic-reduction.patch ++++++
>From 36217c0edce8afe940ec818f5d89a61b9f09bf03 Mon Sep 17 00:00:00 2001
From: Martin Pluskal <[email protected]>
Date: Wed, 5 Aug 2026 10:51:26 +0200
Subject: [PATCH] tests: make test_interleaving_lines_passes reduction unique

test_interleaving_lines_passes asserts one exact reduced output:

    int foo() {
    }

but its interestingness test is `gcc -c test.c && grep foo test.c`, which on
GCC <= 13 also accepts

    int main() {
      return foo();
    }

because an implicit declaration of foo() is merely a warning there. GCC 14
turned -Wimplicit-function-declaration into an error by default, so on a newer
compiler only the expected form survives.

With two admissible reductions the outcome is decided by which of the three
interleaved 'lines' passes happens to win the race, so the test fails
intermittently on any distribution still shipping GCC 13. openSUSE Leap 16.0 and
16.1 both do, and both fail this test, while Tumbleweed (GCC 16) passes. CI runs
on Tumbleweed, which is why this is not seen upstream.

Pin the interestingness test to the stricter behaviour so the reduction is
unique on every compiler.

Note -Wall -Werror (as used by the neighbouring tests) is not usable here: it
would also reject the expected result, whose non-void foo() falls off the end
and trips -Wreturn-type. Verified with both GCC 13 and GCC 15 that the expected
reduction compiles and the alternative one does not.

Upstream: https://github.com/marxin/cvise/pull/513
---
 tests/test_cvise.py | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/tests/test_cvise.py b/tests/test_cvise.py
index 7cacb7c..b900f7e 100644
--- a/tests/test_cvise.py
+++ b/tests/test_cvise.py
@@ -168,7 +168,13 @@ def test_interleaving_lines_passes(tmp_path: Path, 
overridden_subprocess_tmpdir:
         """)
 
     proc = start_cvise(
-        ['-c', 'gcc -c test.c && grep foo test.c', '--pass-group-file', 
str(config_path), testcase_path.name],
+        [
+            '-c',
+            'gcc -c -Werror=implicit-function-declaration test.c && grep foo 
test.c',
+            '--pass-group-file',
+            str(config_path),
+            testcase_path.name,
+        ],
         tmp_path,
         overridden_subprocess_tmpdir,
     )

Reply via email to