Repository navigation
Conversation
…o a line-shifting edit is no longer served the old object The key hashed `-E -P` / `/EP` output, which drops line markers and collapses blank and comment lines. So inserting a comment above a function left the hashed text byte-identical while std::source_location, __builtin_LINE and every -g line table moved: one key, two different objects, and the edited file was served the object built before the edit. Reproduced end to end with the launcher: after adding three comment lines the compile was a HIT whose function reported line 2, where a real compile reports 5. The probe now keeps its markers (`-E`, `/E`), and KeyedPreprocessedText reduces each marker -- GNU's `# N "path" flags` and MSVC's `#line N "path"` -- to its line number and flags before hashing. Dropping the path keeps the key portable, which is all the suppression was for: __FILE__ is already expanded in the text, and a name recorded after preprocessing is root binding's and the prefix maps' to answer. Catch2 across two folders still shares 107 of 107. objkey-v9 / manifest-v10. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CnCkwgtUsaSM5HcgB3APNU
…g only inside @file stop sharing one object A driver expands `@file` itself, so the arguments inside it reached neither the object key nor the direct-mode manifest key -- both hashed the NAME. Reproduced with the launcher: compiling with `-O0` in the file, then changing it to `-O2`, was answered with the `-O0` object (a direct-mode HIT; `mov $0x2` where -O2 gives `mov $0x1`). ResponseFileKeyItems keys each response file's BYTES, with the source root, build tree and dependency cache replaced by their tokens so checkouts still share; no tokenizer of the launcher's can disagree with the driver's about bytes. A file that cannot be read, that names another response file, or that carries an output or dependency-file flag the launcher must read off the command line keeps the compile uncached, with the reason in the verbose trace. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CnCkwgtUsaSM5HcgB3APNU
This was referenced Oct 17, 2026
fastcache-cc: -march=native is keyed as literal text, so one CPU's object is served to another
#1688
Open
Open
Open
Open
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two ways the compile cache served an object built from something other than what was asked, both reproduced end to end with the launcher. Builds on #1686.
Changes
-E -P//EPoutput, which drops line markers and collapses blank and comment lines. Inserting a comment above a function therefore left the key unchanged, whilestd::source_location,__builtin_LINEand every-gline table moved.-E,/E).KeyedPreprocessedTextreduces each marker (GNU# N "path" flags, MSVC#line N "path") to its line number and flags, so the key stays portable: Catch2 across two folders still shares 107 of 107.@fileitself, so both the object key and the direct-mode manifest key hashed only its name.-O0to-O2inside the file was answered with the-O0object.ResponseFileKeyItemskeys each file's bytes, with the source root, build tree and dependency cache tokenized.objkey-v9/manifest-v10.compile-cache.md,AGENT.mdtripwire) anddocs/tools/fastcache-cc.mdare updated.Both came out of an audit of the cache for wrong-object paths; the remaining findings are being filed as separate issues.
🤖 Generated with Claude Code
https://claude.ai/code/session_01CnCkwgtUsaSM5HcgB3APNU