Thank you for filling out a Git bug report! Please answer the following questions to help us understand your issue.
What did you do before the bug happened? (Steps to reproduce your issue) Checking the following patch:
diff --git a/tests/constraint_type_signature_lifting.test b/tests/constraint_type_signature_lifting.test new file mode 100644 index 0000000..0000000 --- /dev/null +++ b/tests/constraint_type_signature_lifting.test @@ -0,0 +1,40 @@ +name: constraint types in signatures are lifted to generic parameters +expect: pass +stop: run +errors: 0 + +[source] +constraint Readable = { + fn uint64 Readable.read(Readable *self); +} + +type File = struct { + uint64 size; +}; + +fn uint64 File.read(File *self) { + return self.size; +} + +fn Readable identity(Readable value) { + return value; +} + +fn uint64 read_size(Readable file) { + return file.read(); +} + +fn int64 main() { + File file = {42}; + File copy = identity(file); + if (copy.size != 42) return 1; + if (read_size(file) != 42) return 2; + return 0; +} + +[stdout] + +[stderr] + +[exit] +0 What did you expect to happen? The patch check to pass What happened instead? "git: apply.c:3856: check_preimage: Assertion `patch->is_new <= 0' failed.i" [System Info] git version: git version 2.54.0 cpu: x86_64 built from commit: 94f057755b7941b321fd11fec1b2e3ca5313a4e0 sizeof-long: 8 sizeof-size_t: 8 shell-path: /bin/sh rust: enabled gettext: enabled libcurl: 8.19.0 OpenSSL: OpenSSL 3.6.2 7 Apr 2026 zlib-ng: 2.3.3 SHA-1: SHA1_DC SHA-256: SHA256_BLK default-ref-format: files default-hash: sha1 uname: Linux 7.0.10-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 23 May 2026 14:21:20 +0000 x86_64 compiler info: gnuc: 15.2 libc info: glibc: 2.43 $SHELL (typically, interactive shell): /usr/bin/bash [Enabled Hooks]