Test source: git
Source: <stdin>
-- 1. ModuleToFunctionPassAdaptor
-- 1. PassManager<Function> : Skipping NOP
-- 2. LowerConstantIntrinsicsPass
----------------------------------------
declare ptr @malloc(noundef i64) noundef noalias allocsize(0)
@buffer = global 4 bytes, align 1
define i64 @pick_max(i32 noundef %n) {
entry:
%cond = icmp eq i32 noundef %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%malloced = call ptr @malloc(noundef i64 8) nofree noundef nothrow noalias willreturn dereferenceable_or_null(8) alloc-family(malloc) allockind(alloc, uninitialized) allocsize(0) memory(inaccessiblemem: readwrite)
br label %if.end
if.end:
%p = phi ptr [ %malloced, %if.else ], [ @buffer, %entry ]
%size = objectsize ptr %p, i1 0, i1 1
ret i64 %size
}
Transformation seems to be correct! (syntactically equal)
-- 3. LowerConstantIntrinsicsPass
----------------------------------------
declare ptr @malloc(noundef i64) noundef noalias allocsize(0)
@buffer = global 4 bytes, align 1
define i64 @pick_max(i32 noundef %n) {
entry:
%cond = icmp eq i32 noundef %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%malloced = call ptr @malloc(noundef i64 8) nofree noundef nothrow noalias willreturn dereferenceable_or_null(8) alloc-family(malloc) allockind(alloc, uninitialized) allocsize(0) memory(inaccessiblemem: readwrite)
br label %if.end
if.end:
%p = phi ptr [ %malloced, %if.else ], [ @buffer, %entry ]
%size = objectsize ptr %p, i1 0, i1 1
ret i64 %size
}
=>
declare ptr @malloc(noundef i64) noundef noalias allocsize(0)
@buffer = global 4 bytes, align 1
define i64 @pick_max(i32 noundef %n) {
entry:
%cond = icmp eq i32 noundef %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%malloced = call ptr @malloc(noundef i64 8) nofree noundef nothrow noalias willreturn dereferenceable_or_null(8) alloc-family(malloc) allockind(alloc, uninitialized) allocsize(0) memory(inaccessiblemem: readwrite)
br label %if.end
if.end:
ret i64 8
}
Transformation seems to be correct!
-- 4. PassManager<Function> : Skipping NOP
-- 5. PassManager<Function> : Skipping NOP
-- 6. LowerConstantIntrinsicsPass
----------------------------------------
declare ptr @malloc(noundef i64) noundef noalias allocsize(0)
@buffer = global 4 bytes, align 1
define i64 @pick_min(i32 noundef %n) {
entry:
%cond = icmp eq i32 noundef %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%malloced = call ptr @malloc(noundef i64 8) nofree noundef nothrow noalias willreturn dereferenceable_or_null(8) alloc-family(malloc) allockind(alloc, uninitialized) allocsize(0) memory(inaccessiblemem: readwrite)
br label %if.end
if.end:
%p = phi ptr [ %malloced, %if.else ], [ @buffer, %entry ]
%size = objectsize ptr %p, i1 1, i1 1
ret i64 %size
}
Transformation seems to be correct! (syntactically equal)
-- 7. LowerConstantIntrinsicsPass
----------------------------------------
declare ptr @malloc(noundef i64) noundef noalias allocsize(0)
@buffer = global 4 bytes, align 1
define i64 @pick_min(i32 noundef %n) {
entry:
%cond = icmp eq i32 noundef %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%malloced = call ptr @malloc(noundef i64 8) nofree noundef nothrow noalias willreturn dereferenceable_or_null(8) alloc-family(malloc) allockind(alloc, uninitialized) allocsize(0) memory(inaccessiblemem: readwrite)
br label %if.end
if.end:
%p = phi ptr [ %malloced, %if.else ], [ @buffer, %entry ]
%size = objectsize ptr %p, i1 1, i1 1
ret i64 %size
}
=>
declare ptr @malloc(noundef i64) noundef noalias allocsize(0)
@buffer = global 4 bytes, align 1
define i64 @pick_min(i32 noundef %n) {
entry:
%cond = icmp eq i32 noundef %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%malloced = call ptr @malloc(noundef i64 8) nofree noundef nothrow noalias willreturn dereferenceable_or_null(8) alloc-family(malloc) allockind(alloc, uninitialized) allocsize(0) memory(inaccessiblemem: readwrite)
br label %if.end
if.end:
ret i64 4
}
Transformation seems to be correct!
-- 8. PassManager<Function> : Skipping NOP
-- 9. PassManager<Function> : Skipping NOP
-- 10. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_max_same(i32 %n) {
entry:
%buffer = alloca i64 1 x i64 20, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%offseted = gep ptr %buffer, 1 x i64 10
br label %if.end
if.end:
%p = phi ptr [ %offseted, %if.else ], [ %buffer, %entry ]
%size = objectsize ptr %p, i1 0, i1 1
ret i64 %size
}
Transformation seems to be correct! (syntactically equal)
-- 11. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_max_same(i32 %n) {
entry:
%buffer = alloca i64 1 x i64 20, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%offseted = gep ptr %buffer, 1 x i64 10
br label %if.end
if.end:
%p = phi ptr [ %offseted, %if.else ], [ %buffer, %entry ]
%size = objectsize ptr %p, i1 0, i1 1
ret i64 %size
}
=>
define i64 @pick_max_same(i32 %n) {
entry:
%buffer = alloca i64 1 x i64 20, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
br label %if.end
if.end:
ret i64 20
}
Transformation seems to be correct!
-- 12. PassManager<Function> : Skipping NOP
-- 13. PassManager<Function> : Skipping NOP
-- 14. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_min_same(i32 %n) {
entry:
%buffer = alloca i64 1 x i64 20, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%offseted = gep ptr %buffer, 1 x i64 10
br label %if.end
if.end:
%p = phi ptr [ %offseted, %if.else ], [ %buffer, %entry ]
%size = objectsize ptr %p, i1 1, i1 1
ret i64 %size
}
Transformation seems to be correct! (syntactically equal)
-- 15. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_min_same(i32 %n) {
entry:
%buffer = alloca i64 1 x i64 20, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%offseted = gep ptr %buffer, 1 x i64 10
br label %if.end
if.end:
%p = phi ptr [ %offseted, %if.else ], [ %buffer, %entry ]
%size = objectsize ptr %p, i1 1, i1 1
ret i64 %size
}
=>
define i64 @pick_min_same(i32 %n) {
entry:
%buffer = alloca i64 1 x i64 20, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
br label %if.end
if.end:
ret i64 10
}
Transformation seems to be correct!
-- 16. PassManager<Function> : Skipping NOP
-- 17. PassManager<Function> : Skipping NOP
-- 18. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_max_large(i1 %c) {
#0:
%buffer = alloca i64 1 x i64 -7, align 1
%s = select i1 %c, ptr null, ptr %buffer
%objsize = objectsize ptr %s, i1 0, i1 0
ret i64 %objsize
}
Transformation seems to be correct! (syntactically equal)
-- 19. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_max_large(i1 %c) {
#0:
%buffer = alloca i64 1 x i64 -7, align 1
%s = select i1 %c, ptr null, ptr %buffer
%objsize = objectsize ptr %s, i1 0, i1 0
ret i64 %objsize
}
=>
define i64 @pick_max_large(i1 %c) {
#0:
%buffer = alloca i64 1 x i64 -7, align 1
ret i64 -1
}
****************************************
WARNING: Source function is always UB.
It can be refined by any target function.
Please make sure this is what you wanted.
****************************************
Transformation seems to be correct!
-- 20. PassManager<Function> : Skipping NOP
-- 21. PassManager<Function> : Skipping NOP
-- 22. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_max_one_oob(i1 %c0, i1 %c1) {
#0:
%p = alloca i64 2, align 1
br i1 %c0, label %if.then, label %if.else
if.else:
%p.else = gep inbounds ptr %p, 2 x i64 0, 1 x i64 -1
br label %if.end
if.then:
%p.then = gep inbounds ptr %p, 2 x i64 0, 1 x i64 1
br label %if.end
if.end:
%p.end = phi ptr [ %p.else, %if.else ], [ %p.then, %if.then ]
%objsize.max = objectsize ptr %p.end, i1 0, i1 1
%objsize.min = objectsize ptr %p.end, i1 1, i1 1
%objsize = select i1 %c1, i64 %objsize.max, i64 %objsize.min
ret i64 %objsize
}
Transformation seems to be correct! (syntactically equal)
-- 23. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_max_one_oob(i1 %c0, i1 %c1) {
#0:
%p = alloca i64 2, align 1
br i1 %c0, label %if.then, label %if.else
if.else:
%p.else = gep inbounds ptr %p, 2 x i64 0, 1 x i64 -1
br label %if.end
if.then:
%p.then = gep inbounds ptr %p, 2 x i64 0, 1 x i64 1
br label %if.end
if.end:
%p.end = phi ptr [ %p.else, %if.else ], [ %p.then, %if.then ]
%objsize.max = objectsize ptr %p.end, i1 0, i1 1
%objsize.min = objectsize ptr %p.end, i1 1, i1 1
%objsize = select i1 %c1, i64 %objsize.max, i64 %objsize.min
ret i64 %objsize
}
=>
define i64 @pick_max_one_oob(i1 %c0, i1 %c1) {
#0:
%p = alloca i64 2, align 1
br i1 %c0, label %if.then, label %if.else
if.else:
br label %if.end
if.then:
br label %if.end
if.end:
%objsize = select i1 %c1, i64 -1, i64 0
ret i64 %objsize
}
Transformation seems to be correct!
-- 24. PassManager<Function> : Skipping NOP
-- 25. PassManager<Function> : Skipping NOP
-- 26. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_negative_offset(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 20, align 1
%offseted0 = gep ptr %buffer0, 1 x i64 20
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%buffer1 = alloca i64 1 x i64 20, align 1
%offseted1 = gep ptr %buffer1, 1 x i64 20
br label %if.end
if.end:
%p = phi ptr [ %offseted1, %if.else ], [ %offseted0, %entry ]
%poffseted = gep ptr %p, 1 x i64 -4
%size = objectsize ptr %poffseted, i1 0, i1 0
ret i64 %size
}
Transformation seems to be correct! (syntactically equal)
-- 27. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_negative_offset(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 20, align 1
%offseted0 = gep ptr %buffer0, 1 x i64 20
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%buffer1 = alloca i64 1 x i64 20, align 1
%offseted1 = gep ptr %buffer1, 1 x i64 20
br label %if.end
if.end:
%p = phi ptr [ %offseted1, %if.else ], [ %offseted0, %entry ]
%poffseted = gep ptr %p, 1 x i64 -4
%size = objectsize ptr %poffseted, i1 0, i1 0
ret i64 %size
}
=>
define i64 @pick_negative_offset(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 20, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
%buffer1 = alloca i64 1 x i64 20, align 1
br label %if.end
if.end:
ret i64 4
}
Transformation seems to be correct!
-- 28. PassManager<Function> : Skipping NOP
-- 29. PassManager<Function> : Skipping NOP
-- 30. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_negative_offset_different_width(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 4, align 1
%buffer1 = alloca i64 1 x i64 8, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.then, label %if.else
if.else:
%offseted1 = gep ptr %buffer1, 1 x i64 6
br label %if.end
if.then:
%offseted0 = gep ptr %buffer0, 1 x i64 1
br label %if.end
if.end:
%p = phi ptr [ %offseted0, %if.then ], [ %offseted1, %if.else ]
%poffseted = gep ptr %p, 1 x i64 -2
%size = objectsize ptr %poffseted, i1 0, i1 0
ret i64 %size
}
Transformation seems to be correct! (syntactically equal)
-- 31. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_negative_offset_different_width(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 4, align 1
%buffer1 = alloca i64 1 x i64 8, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.then, label %if.else
if.else:
%offseted1 = gep ptr %buffer1, 1 x i64 6
br label %if.end
if.then:
%offseted0 = gep ptr %buffer0, 1 x i64 1
br label %if.end
if.end:
%p = phi ptr [ %offseted0, %if.then ], [ %offseted1, %if.else ]
%poffseted = gep ptr %p, 1 x i64 -2
%size = objectsize ptr %poffseted, i1 0, i1 0
ret i64 %size
}
=>
define i64 @pick_negative_offset_different_width(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 4, align 1
%buffer1 = alloca i64 1 x i64 8, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.then, label %if.else
if.else:
br label %if.end
if.then:
br label %if.end
if.end:
ret i64 5
}
Transformation seems to be correct!
-- 32. PassManager<Function> : Skipping NOP
-- 33. PassManager<Function> : Skipping NOP
-- 34. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_negative_offset_with_nullptr(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 20, align 1
%offseted0 = gep ptr %buffer0, 1 x i64 20
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
br label %if.end
if.end:
%p0 = phi ptr [ %offseted0, %entry ], [ null, %if.else ]
%p1 = phi ptr [ null, %if.else ], [ %offseted0, %entry ]
%p0offseted = gep ptr %p0, 1 x i64 -4
%p1offseted = gep ptr %p1, 1 x i64 -4
%size0 = objectsize ptr %p0offseted, i1 0, i1 0
%size1 = objectsize ptr %p1offseted, i1 0, i1 0
%size = select i1 %cond, i64 %size0, i64 %size1
ret i64 %size
}
Transformation seems to be correct! (syntactically equal)
-- 35. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_negative_offset_with_nullptr(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 20, align 1
%offseted0 = gep ptr %buffer0, 1 x i64 20
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
br label %if.end
if.end:
%p0 = phi ptr [ %offseted0, %entry ], [ null, %if.else ]
%p1 = phi ptr [ null, %if.else ], [ %offseted0, %entry ]
%p0offseted = gep ptr %p0, 1 x i64 -4
%p1offseted = gep ptr %p1, 1 x i64 -4
%size0 = objectsize ptr %p0offseted, i1 0, i1 0
%size1 = objectsize ptr %p1offseted, i1 0, i1 0
%size = select i1 %cond, i64 %size0, i64 %size1
ret i64 %size
}
=>
define i64 @pick_negative_offset_with_nullptr(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 20, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
br label %if.end
if.end:
ret i64 4
}
Transformation seems to be correct!
-- 36. PassManager<Function> : Skipping NOP
-- 37. PassManager<Function> : Skipping NOP
-- 38. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_negative_offset_with_unsized_nullptr(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 20, align 1
%offseted0 = gep ptr %buffer0, 1 x i64 20
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
br label %if.end
if.end:
%p0 = phi ptr [ %offseted0, %entry ], [ null, %if.else ]
%p1 = phi ptr [ null, %if.else ], [ %offseted0, %entry ]
%p0offseted = gep ptr %p0, 1 x i64 -4
%p1offseted = gep ptr %p1, 1 x i64 -4
%size0 = objectsize ptr %p0offseted, i1 0, i1 1
%size1 = objectsize ptr %p1offseted, i1 0, i1 1
%size = select i1 %cond, i64 %size0, i64 %size1
ret i64 %size
}
Transformation seems to be correct! (syntactically equal)
-- 39. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @pick_negative_offset_with_unsized_nullptr(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 20, align 1
%offseted0 = gep ptr %buffer0, 1 x i64 20
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
br label %if.end
if.end:
%p0 = phi ptr [ %offseted0, %entry ], [ null, %if.else ]
%p1 = phi ptr [ null, %if.else ], [ %offseted0, %entry ]
%p0offseted = gep ptr %p0, 1 x i64 -4
%p1offseted = gep ptr %p1, 1 x i64 -4
%size0 = objectsize ptr %p0offseted, i1 0, i1 1
%size1 = objectsize ptr %p1offseted, i1 0, i1 1
%size = select i1 %cond, i64 %size0, i64 %size1
ret i64 %size
}
=>
define i64 @pick_negative_offset_with_unsized_nullptr(i32 %n) {
entry:
%buffer0 = alloca i64 1 x i64 20, align 1
%cond = icmp eq i32 %n, 0
br i1 %cond, label %if.else, label %if.end
if.else:
br label %if.end
if.end:
ret i64 -1
}
Transformation seems to be correct!
-- 40. PassManager<Function> : Skipping NOP
-- 41. PassManager<Function> : Skipping NOP
-- 42. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @chain_pick_negative_offset_with_nullptr(i32 %x) {
entry:
%array = alloca i64 16, align 4
%c = icmp eq i32 %x, 0
%p = gep ptr %array, 1 x i64 8
%cond = select i1 %c, ptr %p, ptr null
%p4 = gep ptr %cond, 1 x i64 8
%cond6 = select i1 %c, ptr %p4, ptr null
%p7 = gep ptr %cond6, 1 x i64 -4
%size = objectsize ptr %p7, i1 0, i1 0
ret i64 %size
}
Transformation seems to be correct! (syntactically equal)
-- 43. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @chain_pick_negative_offset_with_nullptr(i32 %x) {
entry:
%array = alloca i64 16, align 4
%c = icmp eq i32 %x, 0
%p = gep ptr %array, 1 x i64 8
%cond = select i1 %c, ptr %p, ptr null
%p4 = gep ptr %cond, 1 x i64 8
%cond6 = select i1 %c, ptr %p4, ptr null
%p7 = gep ptr %cond6, 1 x i64 -4
%size = objectsize ptr %p7, i1 0, i1 0
ret i64 %size
}
=>
define i64 @chain_pick_negative_offset_with_nullptr(i32 %x) {
entry:
%array = alloca i64 16, align 4
ret i64 4
}
Transformation seems to be correct!
-- 44. PassManager<Function> : Skipping NOP
-- 45. PassManager<Function> : Skipping NOP
-- 46. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @negative_offset_dynamic_eval(i32 %x, i64 %i) {
entry:
%array1 = alloca i64 16, align 16
%array2 = alloca i64 32, align 16
%tobool.not = icmp eq i32 %x, 0
br i1 %tobool.not, label %if.else, label %if.then
if.then:
br label %if.end
if.else:
%add.ptr = gep inbounds ptr %array2, 1 x i64 16
br label %if.end
if.end:
%ptr = phi ptr [ %array1, %if.then ], [ %add.ptr, %if.else ]
%add.ptr2 = gep inbounds ptr %ptr, 4 x i64 %i
%objsize = objectsize ptr %add.ptr2, i1 0, i1 1
ret i64 %objsize
}
Transformation seems to be correct! (syntactically equal)
-- 47. LowerConstantIntrinsicsPass
----------------------------------------
define i64 @negative_offset_dynamic_eval(i32 %x, i64 %i) {
entry:
%array1 = alloca i64 16, align 16
%array2 = alloca i64 32, align 16
%tobool.not = icmp eq i32 %x, 0
br i1 %tobool.not, label %if.else, label %if.then
if.then:
br label %if.end
if.else:
%add.ptr = gep inbounds ptr %array2, 1 x i64 16
br label %if.end
if.end:
%ptr = phi ptr [ %array1, %if.then ], [ %add.ptr, %if.else ]
%add.ptr2 = gep inbounds ptr %ptr, 4 x i64 %i
%objsize = objectsize ptr %add.ptr2, i1 0, i1 1
ret i64 %objsize
}
=>
define i64 @negative_offset_dynamic_eval(i32 %x, i64 %i) {
entry:
%array1 = alloca i64 16, align 16
%array2 = alloca i64 32, align 16
%tobool.not = icmp eq i32 %x, 0
br i1 %tobool.not, label %if.else, label %if.then
if.then:
br label %if.end
if.else:
br label %if.end
if.end:
%#0 = phi i64 [ 16, %if.then ], [ 32, %if.else ]
%#1 = phi i64 [ 0, %if.then ], [ 16, %if.else ]
%add.ptr2.idx = mul i64 %i, 4
%#2 = add i64 %#1, %add.ptr2.idx
%#3 = sub i64 %#0, %#2
%#4 = icmp ult i64 %#0, %#2
%#5 = select i1 %#4, i64 0, i64 %#3
%#6 = icmp ne i64 %#5, -1
assume i1 %#6
ret i64 %#5
}
Transformation doesn't verify! (unsound)
ERROR: Source is more defined than target
Example:
i32 %x = #x00000000 (0)
i64 %i = poison
Source:
ptr %array1 = pointer(local, block_id=0, offset=0) / Address=#x00000000000000c0
ptr %array2 = pointer(local, block_id=1, offset=0) / Address=#x0000000000000050
i1 %tobool.not = #x1 (1)
>> Jump to %if.else
ptr %add.ptr = pointer(local, block_id=1, offset=16) / Address=#x0000000000000060
>> Jump to %if.end
ptr %ptr = pointer(local, block_id=1, offset=16) / Address=#x0000000000000060
ptr %add.ptr2 = poison
i64 %objsize = poison
SOURCE MEMORY STATE
===================
LOCAL BLOCKS:
Block 0 > size: 16 align: 16 alloc type: 1 alive: true address: #x00000000000000c0
Block 1 > size: 32 align: 16 alloc type: 1 alive: true address: #x0000000000000050
Target:
ptr %array1 = pointer(local, block_id=0, offset=0) / Address=#x0000000000000010
ptr %array2 = pointer(local, block_id=1, offset=0) / Address=#x0000000000000080
i1 %tobool.not = #x1 (1)
>> Jump to %if.else
>> Jump to %if.end
i64 %#0 = #x0000000000000020 (32)
i64 %#1 = #x0000000000000010 (16)
i64 %add.ptr2.idx = poison
i64 %#2 = poison
i64 %#3 = poison
i1 %#4 = poison
i64 %#5 = poison
i1 %#6 = poison
void = UB triggered!
TARGET MEMORY STATE
===================
LOCAL BLOCKS:
Block 0 > size: 16 align: 16 alloc type: 1 alive: true address: #x0000000000000010
Block 1 > size: 32 align: 16 alloc type: 1 alive: true address: #x0000000000000080
Pass: LowerConstantIntrinsicsPass
Command line: '/home/nlopes/llvm/build/bin/opt' '-load=/home/nlopes/alive2/build/tv/tv.so' '-load-pass-plugin=/home/nlopes/alive2/build/tv/tv.so' '-tv-exit-on-error' '-passes=lower-constant-intrinsics' '-S' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats'
Wrote bitcode to: "/home/nlopes/alive2/build/logs/in_ckQ1GCxb_GXzz.bc"
------------------- SMT STATS -------------------
Num queries: 71
Num invalid: 0
Num skips: 0
Num trivial: 66 (48.2%)
Num timeout: 0 (0.0%)
Num errors: 0 (0.0%)
Num SAT: 51 (71.8%)
Num UNSAT: 20 (28.2%)
Alive2: Transform doesn't verify; aborting!
Transforms/LowerConstantIntrinsics/builtin-object-size-phi.ll' FAILED ******************** Exit Code: 2 Command Output (stdout): -- # RUN: at line 2 /home/nlopes/alive2/build/opt-alive.sh -passes=lower-constant-intrinsics -S < /bitbucket/nlopes/llvm/llvm/test/Transforms/LowerConstantIntrinsics/builtin-object-size-phi.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/LowerConstantIntrinsics/builtin-object-size-phi.ll # executed command: /home/nlopes/alive2/build/opt-alive.sh -passes=lower-constant-intrinsics -S # .---command stderr------------ # `----------------------------- # error: command failed with exit status: 1 # executed command: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/LowerConstantIntrinsics/builtin-object-size-phi.ll # .---command stderr------------ # | FileCheck error: '<stdin>' is empty. # | FileCheck command line: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/LowerConstantIntrinsics/builtin-object-size-phi.ll # `----------------------------- # error: command failed with exit status: 2 --