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).
112 lines
2.4 KiB
LLVM
112 lines
2.4 KiB
LLVM
; RUN: llvm-link %s %S/Inputs/testlink.ll -S | FileCheck %s
|
|
|
|
; CHECK: %Ty1.1 = type { ptr }
|
|
; CHECK: %Ty2 = type { ptr, ptr }
|
|
%Ty1 = type opaque
|
|
%Ty2 = type { ptr, ptr }
|
|
|
|
; CHECK: %intlist = type { ptr, i32 }
|
|
%intlist = type { ptr, i32 }
|
|
|
|
; The uses of intlist in the other file should be remapped.
|
|
; CHECK-NOT: {{%intlist.[0-9]}}
|
|
|
|
; CHECK: %VecSize = type { <5 x i32> }
|
|
; CHECK: %VecSize.{{[0-9]}} = type { <10 x i32> }
|
|
%VecSize = type { <5 x i32> }
|
|
|
|
%Struct1 = type opaque
|
|
@S1GV = external global %Struct1
|
|
|
|
|
|
@GVTy1 = external global %Ty1
|
|
@GVTy2 = global %Ty2 { ptr null, ptr null }
|
|
|
|
|
|
; This should stay the same
|
|
; CHECK-DAG: @MyIntList = global %intlist { ptr null, i32 17 }
|
|
@MyIntList = global %intlist { ptr null, i32 17 }
|
|
|
|
|
|
; Nothing to link here.
|
|
|
|
; CHECK-DAG: @0 = external global i32
|
|
@0 = external global i32
|
|
|
|
define ptr @use0() {
|
|
ret ptr @0
|
|
}
|
|
|
|
; CHECK-DAG: @Inte = global i32 1
|
|
@Inte = global i32 1
|
|
|
|
; Intern1 is intern in both files, rename testlink2's.
|
|
; CHECK-DAG: @Intern1 = internal constant i32 42
|
|
@Intern1 = internal constant i32 42
|
|
|
|
@UseIntern1 = global ptr @Intern1
|
|
|
|
; This should get renamed since there is a definition that is non-internal in
|
|
; the other module.
|
|
; CHECK-DAG: @Intern2.{{[0-9]+}} = internal constant i32 792
|
|
@Intern2 = internal constant i32 792
|
|
|
|
@UseIntern2 = global ptr @Intern2
|
|
|
|
; CHECK-DAG: @MyVarPtr = linkonce global { ptr } { ptr @MyVar }
|
|
@MyVarPtr = linkonce global { ptr } { ptr @MyVar }
|
|
|
|
@UseMyVarPtr = global ptr @MyVarPtr
|
|
|
|
; CHECK-DAG: @MyVar = global i32 4
|
|
@MyVar = external global i32
|
|
|
|
; Take value from other module.
|
|
; CHECK-DAG: AConst = constant i32 1234
|
|
@AConst = linkonce constant i32 123
|
|
|
|
; Renamed version of Intern1.
|
|
; CHECK-DAG: @Intern1.{{[0-9]+}} = internal constant i32 52
|
|
|
|
|
|
; Globals linked from testlink2.
|
|
; CHECK-DAG: @Intern2 = constant i32 12345
|
|
|
|
; CHECK-DAG: @MyIntListPtr = constant
|
|
; CHECK-DAG: @1 = constant i32 412
|
|
|
|
|
|
declare i32 @foo(i32)
|
|
|
|
declare void @print(i32)
|
|
|
|
define void @main() {
|
|
%v1 = load i32, ptr @MyVar
|
|
call void @print(i32 %v1)
|
|
%idx = getelementptr %intlist, ptr @MyIntList, i64 0, i32 1
|
|
%v2 = load i32, ptr %idx
|
|
call void @print(i32 %v2)
|
|
%1 = call i32 @foo(i32 5)
|
|
%v3 = load i32, ptr @MyVar
|
|
call void @print(i32 %v3)
|
|
%v4 = load i32, ptr %idx
|
|
call void @print(i32 %v4)
|
|
ret void
|
|
}
|
|
|
|
define internal void @testintern() {
|
|
ret void
|
|
}
|
|
|
|
define internal void @Testintern() {
|
|
ret void
|
|
}
|
|
|
|
define void @testIntern() {
|
|
ret void
|
|
}
|
|
|
|
define void @VecSizeCrash(%VecSize) {
|
|
ret void
|
|
}
|