cb424d7448
verify-patch-sanity.py validates every active recipe .patch has internally- consistent hunk line counts — catching the 'malformed patch at line N' failure at commit/CI/preflight time instead of hours into a cook. This cycle hit that class three times (qtwaylandscanner, sddm, xwayland), each only discovered when cookbook tried to apply the patch. Running it across the repo found 29 latent malformed patches (validated against GNU patch: e.g. relibc/P3-sysv-ipc reproduces 'malformed patch at line 22'). They were harmless only because they sit in vendored recipes (baked, not re- applied) — but would fail on any version-bump re-derivation. --fix recounts the hunk headers (body untouched) and repaired all 29. Wired into build-preflight.sh (Phase 1.0D) and redbear-ci.yml, with a unit test (test-patch-sanity.sh). Skips archived/legacy trees and unvalidatable formats (empty placeholders, bare-@@ git hunks).
96 lines
5.6 KiB
Plaintext
96 lines
5.6 KiB
Plaintext
RUN: lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj %S/Inputs/precomp.obj /nodefaultlib /entry:main /debug:noghash /pdb:%t.pdb /out:%t.exe /opt:ref /opt:icf /summary | FileCheck %s -check-prefix SUMMARY
|
|
RUN: llvm-pdbutil dump -types %t.pdb | FileCheck %s
|
|
RUN: lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj %S/Inputs/precomp.obj /nodefaultlib /entry:main /debug:ghash /pdb:%t.pdb /out:%t.exe /opt:ref /opt:icf /summary | FileCheck %s -check-prefix SUMMARY
|
|
RUN: llvm-pdbutil dump -types %t.pdb | FileCheck %s
|
|
|
|
RUN: lld-link %S/Inputs/precomp.obj %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug /pdb:%t.pdb /out:%t.exe /opt:ref /opt:icf
|
|
RUN: llvm-pdbutil dump -types %t.pdb | FileCheck %s
|
|
|
|
RUN: lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-invalid.obj %S/Inputs/precomp.obj /nodefaultlib /entry:main /debug:noghash /pdb:%t.pdb /out:%t.exe /opt:ref /opt:icf 2>&1
|
|
RUN: lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-invalid.obj %S/Inputs/precomp.obj /nodefaultlib /entry:main /debug:ghash /pdb:%t.pdb /out:%t.exe /opt:ref /opt:icf 2>&1
|
|
|
|
FIXME: The following RUN line should fail, regardless of whether debug info is
|
|
enabled or not. Normally this would result in an error due to missing _PchSym_
|
|
references, but SymbolTable.cpp suppresses such errors. MSVC seems to have a
|
|
special case for those symbols and it emits the LNK2011 error.
|
|
|
|
RUN: lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug /pdb:%t.pdb /out:%t.exe /opt:ref /opt:icf 2>&1 | FileCheck %s -check-prefix FAILURE-MISSING-PRECOMPOBJ
|
|
|
|
FAILURE-MISSING-PRECOMPOBJ: warning: Cannot use debug info for '{{.*}}precomp-a.obj' [LNK4099]
|
|
FAILURE-MISSING-PRECOMPOBJ-NEXT: failed to load reference '{{.*}}precomp.obj': No matching precompiled header could be located.
|
|
|
|
Check that a PCH object file with an empty S_OBJNAME record works fine.
|
|
Edit out this record from the yaml-ified object:
|
|
- Kind: S_OBJNAME
|
|
ObjNameSym:
|
|
Signature: 545589255
|
|
ObjectName: 'F:\svn\lld\test\COFF\precomp\precomp.obj'
|
|
|
|
RUN: obj2yaml %S/Inputs/precomp.obj | grep -v 'SectionData: *04000000' > %t.precomp.yaml
|
|
RUN: sed '/S_OBJNAME/,/ObjectName:/d' < %t.precomp.yaml > precomp-no-objname.yaml
|
|
RUN: sed '16,19s/Signature: *545589255/Signature: 0/' < %t.precomp.yaml > precomp-zero-sig.yaml
|
|
RUN: yaml2obj precomp-no-objname.yaml -o %t.precomp-no-objname.obj
|
|
RUN: yaml2obj precomp-zero-sig.yaml -o %t.precomp-zero-sig.obj
|
|
RUN: env LLD_IN_TEST=1 lld-link %t.precomp-no-objname.obj %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug:noghash /pdb:%t.pdb /out:%t.exe 2>&1 | FileCheck %s -check-prefix WARNING --allow-empty
|
|
RUN: env LLD_IN_TEST=1 lld-link %t.precomp-no-objname.obj %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug:ghash /pdb:%t.pdb /out:%t.exe 2>&1 | FileCheck %s -check-prefix WARNING --allow-empty
|
|
RUN: env LLD_IN_TEST=1 lld-link %t.precomp-zero-sig.obj %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug:noghash /pdb:%t.pdb /out:%t.exe 2>&1 | FileCheck %s -check-prefix WARNING --allow-empty
|
|
RUN: env LLD_IN_TEST=1 lld-link %t.precomp-zero-sig.obj %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug:ghash /pdb:%t.pdb /out:%t.exe 2>&1 | FileCheck %s -check-prefix WARNING --allow-empty
|
|
|
|
WARNING-NOT: warning
|
|
|
|
Check that a PCH with wrong signature, but with right LF_PRECOMP records count, works.
|
|
|
|
RUN: mkdir -p %t.dir
|
|
RUN: sed '16,19s/Signature: *545589255/Signature: 123456789/' < %t.precomp.yaml > precomp-wrong-sig.yaml
|
|
RUN: yaml2obj precomp-wrong-sig.yaml -o %t.dir/precomp.obj
|
|
RUN: env LLD_IN_TEST=1 lld-link %t.dir/precomp.obj %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug:noghash /pdb:%t.pdb /out:%t.exe 2>&1 | FileCheck %s -check-prefix WARNING --allow-empty
|
|
RUN: env LLD_IN_TEST=1 lld-link %t.dir/precomp.obj %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug:ghash /pdb:%t.pdb /out:%t.exe 2>&1 | FileCheck %s -check-prefix WARNING --allow-empty
|
|
|
|
Check that two PCH objs with duplicate signatures are an error.
|
|
|
|
RUN: cp %S/Inputs/precomp.obj %t.precomp-dup.obj
|
|
RUN: env LLD_IN_TEST=1 not lld-link %S/Inputs/precomp.obj %t.precomp-dup.obj %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug /pdb:%t.pdb /out:%t.exe 2>&1 | FileCheck %s -check-prefix FAILURE-DUP-SIGNATURE
|
|
FAILURE-DUP-SIGNATURE: error: a PCH object with the same signature has already been provided ({{.*precomp.obj and .*precomp-dup.obj.*}})
|
|
|
|
|
|
CHECK: Types (TPI Stream)
|
|
CHECK-NOT: LF_PRECOMP
|
|
CHECK-NOT: LF_ENDPRECOMP
|
|
|
|
SUMMARY: Summary
|
|
SUMMARY-NEXT: --------------------------------------------------------------------------------
|
|
SUMMARY-NEXT: 3 Input OBJ files (expanded from all cmd-line inputs)
|
|
SUMMARY-NEXT: 0 PDB type server dependencies
|
|
SUMMARY-NEXT: 1 Precomp OBJ dependencies
|
|
SUMMARY-NEXT: 1066 Input type records
|
|
SUMMARY-NEXT: 55968 Input type records bytes
|
|
SUMMARY-NEXT: 874 Merged TPI records
|
|
SUMMARY-NEXT: 170 Merged IPI records
|
|
SUMMARY-NEXT: 5 Output PDB strings
|
|
SUMMARY-NEXT: 167 Global symbol records
|
|
SUMMARY-NEXT: 20 Module symbol records
|
|
SUMMARY-NEXT: 3 Public symbol records
|
|
|
|
// precomp.h
|
|
#pragma once
|
|
int Function(char A);
|
|
|
|
// precomp.cpp
|
|
#include "precomp.h"
|
|
|
|
// a.cpp
|
|
#include "precomp.h"
|
|
int main(void) {
|
|
Function('a');
|
|
return 0;
|
|
}
|
|
|
|
// b.cpp
|
|
#include "precomp.h"
|
|
int Function(char a) {
|
|
return (int)a;
|
|
}
|
|
|
|
// cl.exe precomp.cpp /Z7 /Ycprecomp.h /c
|
|
// cl.exe a.cpp b.cpp /Z7 /Yuprecomp.h /c
|