AI review of 2026-10-27_13-37-08-9d0880c8a9fe-results.txt PR: #8969 https://github.com/cppcheck-opensource/cppcheck/pull/8969 Tested: 9d0880c8a9fed769c3f3320d01790b10fefc4b89 Merge base: ef06677d725d82e8da3e52a5a1dd090c86b0762b Reviewed: 2026-10-28 13:21:14 UTC Model: claude-opus-5-5 (effort high) Results: 8 reviewed of 8 in the report, the test is still running (600 analysed of 1000 requested packages) Verdicts: 7 improvement, 1 regression Tokens: 18615 input, 9762 cache read, 3254 cache write, 5176 output The verdicts are written by AI and can be wrong. ---- 1 / 8 ---- Verdict: REGRESSION (low confidence) Package: https://ftp.debian.org/debian/pool/main/c/cxxtools/cxxtools_3.0.0.orig.tar.gz Result: main cxxtools-3.0/test/serializationinfo-test.cpp:46:5: warning:inconclusive: Access of moved variable 'si'. [accessMoved] cxxtools-3.0/test/serializationinfo-test.cpp:396:23: note: Calling std::move(si) cxxtools-3.0/test/serializationinfo-test.cpp:398:59: note: Calling function 'siValue < std :: string >', 1st argument 'si' value is cxxtools-3.0/test/serializationinfo-test.cpp:46:5: note: Access of moved variable 'si'. Explanation: Main warned that `si` is accessed after `std::move(si)`. The move happens at line 396, and at line 398 `si` is passed by const reference to `siValue`, which calls `si.getValue()` at line 46. The PR now strips moved values before propagating arguments into subfunctions. As a result the warning inside `siValue` disappears, and no replacement warning appears at the call site on line 398. The code really does read a moved-from object, though this is probably a deliberate check of moved-from state in `testMove`. Lines 396–398 are not shown, so this cannot be fully confirmed. Even so, a genuine use-after-move diagnostic was lost rather than moved to a better location, so this looks like a lost true positive. ---- 2 / 8 ---- Verdict: IMPROVEMENT (high confidence) Package: https://ftp.debian.org/debian/pool/main/g/grandorgue/grandorgue_3.17.3.orig.tar.gz Result: main GrandOrgue-grandorgue-a378da0/src/tests/testing/sound/buffer/GOTestSoundBufferManaged.cpp:33:6: warning:inconclusive: Access of moved variable 'source'. [accessMoved] GrandOrgue-grandorgue-a378da0/src/tests/testing/sound/buffer/GOTestSoundBufferManaged.cpp:176:12: note: Calling std::move(source) GrandOrgue-grandorgue-a378da0/src/tests/testing/sound/buffer/GOTestSoundBufferManaged.cpp:178:59: note: Calling function 'AssertMoveResult', 4th argument 'source' value is GrandOrgue-grandorgue-a378da0/src/tests/testing/sound/buffer/GOTestSoundBufferManaged.cpp:33:6: note: Access of moved variable 'source'. Explanation: Line 176 moves `source` into another buffer, and line 178 then passes `source` by const reference to AssertMoveResult. Inside that function, line 33 checks the moved-from state on purpose (`!source.isValid()`). This is what a move test is supposed to do, and the caller-side access at line 178 is not where the warning was reported. Main pushed the value into the subfunction and reported the parameter access inside the callee, which is a false positive. The PR stops passing moved values into subfunctions, so the false positive is gone. A real misuse at the call site would still be reported there, as the PR's new test shows. ---- 3 / 8 ---- Verdict: IMPROVEMENT (high confidence) Package: https://ftp.debian.org/debian/pool/main/g/grandorgue/grandorgue_3.17.3.orig.tar.gz Result: main GrandOrgue-grandorgue-a378da0/src/tests/testing/sound/buffer/GOTestSoundBufferManaged.cpp:35:6: warning:inconclusive: Access of moved variable 'source'. [accessMoved] GrandOrgue-grandorgue-a378da0/src/tests/testing/sound/buffer/GOTestSoundBufferManaged.cpp:176:12: note: Calling std::move(source) GrandOrgue-grandorgue-a378da0/src/tests/testing/sound/buffer/GOTestSoundBufferManaged.cpp:178:59: note: Calling function 'AssertMoveResult', 4th argument 'source' value is GrandOrgue-grandorgue-a378da0/src/tests/testing/sound/buffer/GOTestSoundBufferManaged.cpp:35:6: note: Access of moved variable 'source'. Explanation: The test deliberately moves from 'source' (line 176) and then passes it to AssertMoveResult. That function checks that the moved-from buffer is invalid and has a null data pointer. Inspecting a moved-from object's documented state is intentional here and is not a bug. Main reported the access at line 35 inside the callee because the value was propagated into the subfunction. The real access is at the call site. The PR stops propagating moved values into subfunctions, so this misleading false positive inside AssertMoveResult goes away. ---- 4 / 8 ---- Verdict: IMPROVEMENT (medium confidence) Package: https://ftp.debian.org/debian/pool/main/m/mozjs128/mozjs128_128.14.0.orig.tar.xz Result: main firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:25:16: warning:inconclusive: Access of moved variable 'aVal'. [accessMoved] firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:194:9: note: Calling std::move(oldVal) firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:196:19: note: Calling function 'AssertIsNothing', 1st argument 'oldVal' value is firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:25:16: note: Access of moved variable 'aVal'. Explanation: Line 194 moves `oldVal`, and line 196 then calls `AssertIsNothing(oldVal)` on purpose. The test is checking that a moved-from InitializedOnce is in its documented empty state. Main carried the value into the callee and warned inside the generic helper about `aVal`. That location is misleading: the helper itself does nothing wrong, and any access-after-move concern belongs at the call site. The PR stops passing moved values into subfunctions, so these indirect warnings inside the callee disappear. The intended case, accessing the moved variable directly in the caller (as in the new test), is still detected. Here the moved-from state is well-defined and is exactly what the code checks, so the removed warnings are false positives or noise. ---- 5 / 8 ---- Verdict: IMPROVEMENT (medium confidence) Package: https://ftp.debian.org/debian/pool/main/m/mozjs128/mozjs128_128.14.0.orig.tar.xz Result: main firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:26:16: warning:inconclusive: Access of moved variable 'aVal'. [accessMoved] firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:194:9: note: Calling std::move(oldVal) firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:196:19: note: Calling function 'AssertIsNothing', 1st argument 'oldVal' value is firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:26:16: note: Access of moved variable 'aVal'. Explanation: At line 194 the test moves from `oldVal`, then at line 196 it calls `AssertIsNothing(oldVal)`. This is a deliberate check that a moved-from InitializedOnce is empty. Main pushed the value into the callee and reported an inconclusive accessMoved on `aVal` inside the generic helper, at lines 25–27. That body is not itself a use-after-move; it just receives a const reference. The PR stops propagating moved values into subfunctions. Any use-after-move is then judged at the call site, as the PR's new test shows. Dropping these duplicated, misplaced warnings inside the helper is an improvement. ---- 6 / 8 ---- Verdict: IMPROVEMENT (medium confidence) Package: https://ftp.debian.org/debian/pool/main/m/mozjs128/mozjs128_128.14.0.orig.tar.xz Result: main firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:27:15: warning:inconclusive: Access of moved variable 'aVal'. [accessMoved] firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:194:9: note: Calling std::move(oldVal) firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:196:19: note: Calling function 'AssertIsNothing', 1st argument 'oldVal' value is firefox-128.14.0/mfbt/tests/gtest/TestInitializedOnce.cpp:27:15: note: Access of moved variable 'aVal'. Explanation: Around line 194–196, the test moves from `oldVal` and then calls `AssertIsNothing(oldVal)`. It does this on purpose: `InitializedOnce` defines its moved-from state as Nothing, and the test checks exactly that. Main carried the value into the template helper `AssertIsNothing` and reported 'Access of moved variable aVal' inside it. That diagnostic lands in a generic helper, far from the actual move. The PR stops passing moved values into subfunctions, so any accessMoved diagnostic would now refer to the caller where the move happens. Removing these three duplicated, misplaced and intentional-use warnings in the helper is a net improvement. ---- 7 / 8 ---- Verdict: IMPROVEMENT (medium confidence) Package: https://ftp.debian.org/debian/pool/main/o/onnxruntime/onnxruntime_1.27.1+dfsg.orig.tar.xz Result: main microsoft-onnxruntime-df2ba1c/onnxruntime/test/framework/key_value_pairs_test.cc:17:3: warning:inconclusive: Access of moved variable 'kvps'. [accessMoved] microsoft-onnxruntime-df2ba1c/onnxruntime/test/framework/key_value_pairs_test.cc:61:28: note: Calling std::move(kvps1) microsoft-onnxruntime-df2ba1c/onnxruntime/test/framework/key_value_pairs_test.cc:62:20: note: Calling function 'CheckConsistency', 1st argument 'kvps1' value is microsoft-onnxruntime-df2ba1c/onnxruntime/test/framework/key_value_pairs_test.cc:17:3: note: Access of moved variable 'kvps'. Explanation: Line 61 moves kvps1, and line 62 deliberately passes the moved-from object to CheckConsistency(const OrtKeyValuePairs&). The test checks that a moved-from OrtKeyValuePairs is still internally consistent. Calling Keys()/Entries()/size() on a moved-from object is legal, because it is valid but unspecified, and that is exactly what the test means to do. The old warning was raised inside the callee at line 17 only because the value was pushed into the subfunction. That made it noisy and misleadingly located for intentional code. The PR stops propagating moved values into subfunctions, which removes this inconclusive warning. The PR does lose some detection for moved objects passed by reference, but for this code the removal reduces a false positive. ---- 8 / 8 ---- Verdict: IMPROVEMENT (medium confidence) Package: https://ftp.debian.org/debian/pool/main/o/onnxruntime/onnxruntime_1.27.1+dfsg.orig.tar.xz Result: main microsoft-onnxruntime-df2ba1c/onnxruntime/test/framework/key_value_pairs_test.cc:18:3: warning:inconclusive: Access of moved variable 'kvps'. [accessMoved] microsoft-onnxruntime-df2ba1c/onnxruntime/test/framework/key_value_pairs_test.cc:61:28: note: Calling std::move(kvps1) microsoft-onnxruntime-df2ba1c/onnxruntime/test/framework/key_value_pairs_test.cc:62:20: note: Calling function 'CheckConsistency', 1st argument 'kvps1' value is microsoft-onnxruntime-df2ba1c/onnxruntime/test/framework/key_value_pairs_test.cc:17:3: note: Assuming condition is false microsoft-onnxruntime-df2ba1c/onnxruntime/test/framework/key_value_pairs_test.cc:18:3: note: Access of moved variable 'kvps'. Explanation: Line 61 moves kvps1 into another object, and line 62 then passes kvps1 to CheckConsistency. A moved-from OrtKeyValuePairs is in a valid but unspecified state, and the test deliberately checks that it is still consistent. Inside CheckConsistency, reading 'kvps' at line 18 is a legitimate access to the function's own parameter. Reporting accessMoved there, inside the callee, is a false positive. If the caller-side use were a problem, it would belong at the call site. The PR stops passing moved values into subfunctions, which removes this bogus inconclusive warning.