diff --git a/kmir/src/kmir/kdist/mir-semantics/intrinsics.md b/kmir/src/kmir/kdist/mir-semantics/intrinsics.md index 201f20594..bbeab2c7f 100644 --- a/kmir/src/kmir/kdist/mir-semantics/intrinsics.md +++ b/kmir/src/kmir/kdist/mir-semantics/intrinsics.md @@ -319,6 +319,46 @@ the second argument, so the returned difference is always positive. [priority(100)] ``` +#### Size of a value (`std::intrinsics::size_of_val`) + +`size_of_val` returns the size in bytes of the value its argument points to. The pointee type is +computed from the argument's type and its size from the existing `#sizeOf`. + +Only statically-sized pointees are handled here: the rule requires the pointee not to be a +dynamically-sized type (`#metadataSize =/=K dynamicSize(1)`). Dynamically-sized pointees (slices, +`str`, `dyn`) need the runtime metadata carried by the fat pointer and are left for later (the +intrinsic stays stuck on them rather than returning a wrong size). + +```k + rule #execIntrinsic(IntrinsicFunction(symbol("size_of_val")), ARG:Operand .Operands, DEST, _SPAN) + => #setLocalValue(DEST, Integer(#sizeOf(TYPESMAP, lookupTy(TYPESMAP, {pointeeTy(lookupTy(TYPESMAP, {#extractOperandType(TYPESMAP, ARG, LOCALS)}:>Ty))}:>Ty)), 64, false)) + ... + LOCALS + TYPESMAP + requires isTy(#extractOperandType(TYPESMAP, ARG, LOCALS)) + andBool isTy(pointeeTy(lookupTy(TYPESMAP, {#extractOperandType(TYPESMAP, ARG, LOCALS)}:>Ty))) + andBool #metadataSize(TYPESMAP, pointeeTy(lookupTy(TYPESMAP, {#extractOperandType(TYPESMAP, ARG, LOCALS)}:>Ty))) =/=K dynamicSize(1) + [preserves-definedness] +``` + +#### Minimum alignment of a value (`std::intrinsics::min_align_of_val`) + +`min_align_of_val` returns the minimum alignment of the value its argument points to. +The pointee type is computed from the argument's type and the alignment from the existing `#alignOf`. Again only statically-sized pointee types are handled here. +Dynamically-sized ones are left for later, so the intrinsic stays stuck if one reaches here. + +```k + rule #execIntrinsic(IntrinsicFunction(symbol("min_align_of_val")), ARG:Operand .Operands, DEST, _SPAN) + => #setLocalValue(DEST, Integer(#alignOf(TYPESMAP, lookupTy(TYPESMAP, {pointeeTy(lookupTy(TYPESMAP, {#extractOperandType(TYPESMAP, ARG, LOCALS)}:>Ty))}:>Ty)), 64, false)) + ... + LOCALS + TYPESMAP + requires isTy(#extractOperandType(TYPESMAP, ARG, LOCALS)) + andBool isTy(pointeeTy(lookupTy(TYPESMAP, {#extractOperandType(TYPESMAP, ARG, LOCALS)}:>Ty))) + andBool #metadataSize(TYPESMAP, pointeeTy(lookupTy(TYPESMAP, {#extractOperandType(TYPESMAP, ARG, LOCALS)}:>Ty))) =/=K dynamicSize(1) + [preserves-definedness] +``` + ```k endmodule ``` diff --git a/kmir/src/tests/external/data/stable-mir-ui/skip-exec.txt b/kmir/src/tests/external/data/stable-mir-ui/skip-exec.txt index 3834a52ab..46f738c64 100644 --- a/kmir/src/tests/external/data/stable-mir-ui/skip-exec.txt +++ b/kmir/src/tests/external/data/stable-mir-ui/skip-exec.txt @@ -260,7 +260,6 @@ tests/ui/catch-unwind-bang.rs tests/ui/cfg/cfg_attr.rs tests/ui/cfg/cfg-macros-foo.rs tests/ui/cfg/cfgs-on-items.rs -tests/ui/cfg/conditional-compile.rs tests/ui/cfguard-run.rs tests/ui/char.rs tests/ui/cleanup-rvalue-for-scope.rs @@ -315,7 +314,6 @@ tests/ui/codegen/equal-pointers-unequal/strict-provenance/print.rs tests/ui/codegen/equal-pointers-unequal/strict-provenance/segfault.rs tests/ui/codegen/equal-pointers-unequal/strict-provenance/zero.rs tests/ui/codegen/init-large-type.rs -tests/ui/codegen/issue-16602-3.rs tests/ui/codegen/issue-27859.rs tests/ui/codegen/issue-28950.rs tests/ui/codegen/issue-55976.rs @@ -364,8 +362,6 @@ tests/ui/const_prop/const-prop-ice3.rs tests/ui/const_prop/dont-propagate-generic-instance-2.rs tests/ui/const_prop/dont-propagate-generic-instance.rs tests/ui/consts/cast-discriminant-zst-enum.rs -tests/ui/consts/const-adt-align-mismatch.rs -tests/ui/consts/const-big-enum.rs tests/ui/consts/const-binops.rs tests/ui/consts/const-block-item-macro-codegen.rs tests/ui/consts/const-block-item.rs @@ -374,22 +370,7 @@ tests/ui/consts/const-bound.rs tests/ui/consts/const-cast-ptr-int.rs tests/ui/consts/const-cast.rs tests/ui/consts/const-contents.rs -tests/ui/consts/const-deref.rs tests/ui/consts/const_discriminant.rs -tests/ui/consts/const-enum-byref.rs -tests/ui/consts/const-enum-byref-self.rs -tests/ui/consts/const-enum-cast.rs -tests/ui/consts/const-enum-ptr.rs -tests/ui/consts/const-enum-struct2.rs -tests/ui/consts/const-enum-structlike.rs -tests/ui/consts/const-enum-struct.rs -tests/ui/consts/const-enum-tuple2.rs -tests/ui/consts/const-enum-tuple.rs -tests/ui/consts/const-enum-tuplestruct2.rs -tests/ui/consts/const-enum-tuplestruct.rs -tests/ui/consts/const-enum-vec-index.rs -tests/ui/consts/const-enum-vec-ptr.rs -tests/ui/consts/const-enum-vector.rs tests/ui/consts/const-eval/const_fn_ptr.rs tests/ui/consts/const-eval/float_methods.rs tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient.rs @@ -408,9 +389,6 @@ tests/ui/consts/const_in_pattern/custom-eq-branch-pass.rs tests/ui/consts/const_in_pattern/null-raw-ptr-issue-119270.rs tests/ui/consts/const-int-arithmetic-overflow.rs tests/ui/consts/const_let_eq_float.rs -tests/ui/consts/const-needs_drop.rs -tests/ui/consts/const-negative.rs -tests/ui/consts/const-nullary-enum.rs tests/ui/consts/const-nullary-univariant-enum.rs tests/ui/consts/const-pattern-variant.rs tests/ui/consts/const-ptr-nonnull-rpass.rs @@ -422,7 +400,6 @@ tests/ui/consts/const-region-ptrs.rs tests/ui/consts/const.rs tests/ui/consts/const-size_of_val-align_of_val.rs tests/ui/consts/const-struct.rs -tests/ui/consts/const-tuple-struct.rs tests/ui/consts/const-typeid-of-rpass.rs tests/ui/consts/const-variant-count.rs tests/ui/consts/const-vec-of-fns.rs @@ -434,7 +411,6 @@ tests/ui/consts/issue-21721.rs tests/ui/consts/issue-23833.rs tests/ui/consts/issue-27890.rs tests/ui/consts/issue-33537.rs -tests/ui/consts/issue-37222.rs tests/ui/consts/issue-46553.rs tests/ui/consts/issue-58435-ice-with-assoc-const.rs tests/ui/consts/issue-66345.rs @@ -442,9 +418,7 @@ tests/ui/consts/issue-67640.rs tests/ui/consts/issue-69532.rs tests/ui/consts/issue-90762.rs tests/ui/consts/load-preserves-partial-init.rs -tests/ui/consts/locals-in-const-fn.rs tests/ui/consts/mut-ptr-to-static.rs -tests/ui/consts/offset.rs tests/ui/consts/promoted_const_call4.rs tests/ui/consts/promotion-mutable-ref.rs tests/ui/consts/references.rs @@ -773,7 +747,6 @@ tests/ui/issues/issue-12677.rs tests/ui/issues/issue-12744.rs tests/ui/issues/issue-12860.rs tests/ui/issues/issue-12909.rs -tests/ui/issues/issue-13027.rs tests/ui/issues/issue-13204.rs tests/ui/issues/issue-13323.rs tests/ui/issues/issue-13434.rs @@ -849,7 +822,6 @@ tests/ui/issues/issue-23891.rs tests/ui/issues/issue-24533.rs tests/ui/issues/issue-24779.rs tests/ui/issues/issue-25089.rs -tests/ui/issues/issue-25145.rs tests/ui/issues/issue-25497.rs tests/ui/issues/issue-25515.rs tests/ui/issues/issue-25549-multiple-drop.rs @@ -872,7 +844,6 @@ tests/ui/issues/issue-28498-ugeh-ex1.rs tests/ui/issues/issue-28550.rs tests/ui/issues/issue-29053.rs tests/ui/issues/issue-29071-2.rs -tests/ui/issues/issue-29147-rpass.rs tests/ui/issues/issue-2935.rs tests/ui/issues/issue-29466.rs tests/ui/issues/issue-29668.rs @@ -1066,7 +1037,6 @@ tests/ui/match/issue-114691.rs tests/ui/match/issue-115681.rs tests/ui/match/issue-11940.rs tests/ui/match/issue-26251.rs -tests/ui/match/issue-36401.rs tests/ui/match/issue-42679.rs tests/ui/match/issue-72680.rs tests/ui/match/match-float.rs @@ -1113,7 +1083,6 @@ tests/ui/mir/mir_overflow_off.rs tests/ui/mir/mir_raw_fat_ptr.rs tests/ui/mir/mir_temp_promotions.rs tests/ui/mir/validate/needs-reveal-all.rs -tests/ui/monomorphize-abi-alignment.rs tests/ui/moves/move-1-unique.rs tests/ui/moves/move-2.rs tests/ui/moves/move-2-unique.rs @@ -1168,7 +1137,6 @@ tests/ui/numbers-arithmetic/overflow-attribute-works-2.rs tests/ui/numbers-arithmetic/saturating-float-casts.rs tests/ui/numbers-arithmetic/saturating-float-casts-wasm.rs tests/ui/numbers-arithmetic/shift-near-oflo.rs -tests/ui/numbers-arithmetic/shift.rs tests/ui/numbers-arithmetic/u128-as-f32.rs tests/ui/numbers-arithmetic/u128.rs tests/ui/numbers-arithmetic/unary-minus-suffix-inference.rs @@ -1301,7 +1269,6 @@ tests/ui/regions/regions-self-in-enums.rs tests/ui/regions/regions-simple.rs tests/ui/regions/regions-static-closure.rs tests/ui/regions/regions-trait-object-1.rs -tests/ui/repeat-expr/repeat-expr-in-static.rs tests/ui/repr/aligned_enum_cast.rs tests/ui/repr/repr_c_int_align.rs tests/ui/resolve/blind-item-local-shadow.rs @@ -1385,7 +1352,6 @@ tests/ui/self/string-self-append.rs tests/ui/self/ufcs-explicit-self.rs tests/ui/self/uniq-self-in-mut-slot.rs tests/ui/self/where-for-self.rs -tests/ui/sepcomp/sepcomp-statics.rs tests/ui/sepcomp/sepcomp-unwind.rs tests/ui/simd/array-type.rs tests/ui/simd/generics.rs @@ -1425,9 +1391,7 @@ tests/ui/specialization/specialization-assoc-fns.rs tests/ui/specialization/specialization-basics.rs tests/ui/specialization/specialization-default-methods.rs tests/ui/sse2.rs -tests/ui/static/refer-to-other-statics-by-value.rs tests/ui/statics/const_generics.rs -tests/ui/statics/issue-17233.rs tests/ui/statics/static-function-pointer.rs tests/ui/statics/static-impl.rs tests/ui/statics/static-promotion.rs @@ -1450,7 +1414,6 @@ tests/ui/structs-enums/class-impl-very-parameterized-trait.rs tests/ui/structs-enums/class-poly-methods.rs tests/ui/structs-enums/class-separate-impl.rs tests/ui/structs-enums/class-str-field.rs -tests/ui/structs-enums/codegen-tag-static-padding.rs tests/ui/structs-enums/empty-tag.rs tests/ui/structs-enums/enum-alignment.rs tests/ui/structs-enums/enum-clike-ffi-as-int.rs @@ -1460,7 +1423,6 @@ tests/ui/structs-enums/enum-disr-val-pretty.rs tests/ui/structs-enums/enum-non-c-like-repr-c-and-int.rs tests/ui/structs-enums/enum-non-c-like-repr-c.rs tests/ui/structs-enums/enum-non-c-like-repr-int.rs -tests/ui/structs-enums/enum-nullable-const-null-with-fields.rs tests/ui/structs-enums/enum-nullable-simplifycfg-misopt.rs tests/ui/structs-enums/enum-null-pointer-opt.rs tests/ui/structs-enums/enum-univariant-repr.rs @@ -1599,7 +1561,6 @@ tests/ui/traits/issue-9394-inherited-calls.rs tests/ui/traits/kindck-owned-contains-1.rs tests/ui/traits/monad.rs tests/ui/traits/multidispatch-conditional-impl-not-considered.rs -tests/ui/traits/next-solver/alias-bound-preference.rs tests/ui/traits/next-solver/dyn-any-dont-prefer-impl.rs tests/ui/traits/object/auto-dedup.rs tests/ui/traits/object/exclusion.rs @@ -1678,7 +1639,6 @@ tests/ui/unboxed-closures/unboxed-closures-prelude.rs tests/ui/unboxed-closures/unboxed-closures-single-word-env.rs tests/ui/unboxed-closures/unboxed-closures-sugar-object.rs tests/ui/unboxed-closures/unboxed-closures-zero-args.rs -tests/ui/union/union-align.rs tests/ui/union/union-const-codegen.rs tests/ui/union/union-const-eval-field.rs tests/ui/union/union-drop-assign.rs diff --git a/kmir/src/tests/external/data/stable-mir-ui/skip-prove.txt b/kmir/src/tests/external/data/stable-mir-ui/skip-prove.txt index af9ed446f..5b8181250 100644 --- a/kmir/src/tests/external/data/stable-mir-ui/skip-prove.txt +++ b/kmir/src/tests/external/data/stable-mir-ui/skip-prove.txt @@ -260,7 +260,6 @@ tests/ui/catch-unwind-bang.rs tests/ui/cfg/cfg_attr.rs tests/ui/cfg/cfg-macros-foo.rs tests/ui/cfg/cfgs-on-items.rs -tests/ui/cfg/conditional-compile.rs tests/ui/cfguard-run.rs tests/ui/char.rs tests/ui/cleanup-rvalue-for-scope.rs @@ -315,7 +314,6 @@ tests/ui/codegen/equal-pointers-unequal/strict-provenance/print.rs tests/ui/codegen/equal-pointers-unequal/strict-provenance/segfault.rs tests/ui/codegen/equal-pointers-unequal/strict-provenance/zero.rs tests/ui/codegen/init-large-type.rs -tests/ui/codegen/issue-16602-3.rs tests/ui/codegen/issue-27859.rs tests/ui/codegen/issue-28950.rs tests/ui/codegen/issue-55976.rs @@ -364,8 +362,6 @@ tests/ui/const_prop/const-prop-ice3.rs tests/ui/const_prop/dont-propagate-generic-instance-2.rs tests/ui/const_prop/dont-propagate-generic-instance.rs tests/ui/consts/cast-discriminant-zst-enum.rs -tests/ui/consts/const-adt-align-mismatch.rs -tests/ui/consts/const-big-enum.rs tests/ui/consts/const-binops.rs tests/ui/consts/const-block-item-macro-codegen.rs tests/ui/consts/const-block-item.rs @@ -374,22 +370,7 @@ tests/ui/consts/const-bound.rs tests/ui/consts/const-cast-ptr-int.rs tests/ui/consts/const-cast.rs tests/ui/consts/const-contents.rs -tests/ui/consts/const-deref.rs tests/ui/consts/const_discriminant.rs -tests/ui/consts/const-enum-byref.rs -tests/ui/consts/const-enum-byref-self.rs -tests/ui/consts/const-enum-cast.rs -tests/ui/consts/const-enum-ptr.rs -tests/ui/consts/const-enum-struct2.rs -tests/ui/consts/const-enum-structlike.rs -tests/ui/consts/const-enum-struct.rs -tests/ui/consts/const-enum-tuple2.rs -tests/ui/consts/const-enum-tuple.rs -tests/ui/consts/const-enum-tuplestruct2.rs -tests/ui/consts/const-enum-tuplestruct.rs -tests/ui/consts/const-enum-vec-index.rs -tests/ui/consts/const-enum-vec-ptr.rs -tests/ui/consts/const-enum-vector.rs tests/ui/consts/const-eval/const_fn_ptr.rs tests/ui/consts/const-eval/float_methods.rs tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient.rs @@ -408,9 +389,6 @@ tests/ui/consts/const_in_pattern/custom-eq-branch-pass.rs tests/ui/consts/const_in_pattern/null-raw-ptr-issue-119270.rs tests/ui/consts/const-int-arithmetic-overflow.rs tests/ui/consts/const_let_eq_float.rs -tests/ui/consts/const-needs_drop.rs -tests/ui/consts/const-negative.rs -tests/ui/consts/const-nullary-enum.rs tests/ui/consts/const-nullary-univariant-enum.rs tests/ui/consts/const-pattern-variant.rs tests/ui/consts/const-ptr-nonnull-rpass.rs @@ -422,7 +400,6 @@ tests/ui/consts/const-region-ptrs.rs tests/ui/consts/const.rs tests/ui/consts/const-size_of_val-align_of_val.rs tests/ui/consts/const-struct.rs -tests/ui/consts/const-tuple-struct.rs tests/ui/consts/const-typeid-of-rpass.rs tests/ui/consts/const-variant-count.rs tests/ui/consts/const-vec-of-fns.rs @@ -434,7 +411,6 @@ tests/ui/consts/issue-21721.rs tests/ui/consts/issue-23833.rs tests/ui/consts/issue-27890.rs tests/ui/consts/issue-33537.rs -tests/ui/consts/issue-37222.rs tests/ui/consts/issue-46553.rs tests/ui/consts/issue-58435-ice-with-assoc-const.rs tests/ui/consts/issue-66345.rs @@ -442,9 +418,7 @@ tests/ui/consts/issue-67640.rs tests/ui/consts/issue-69532.rs tests/ui/consts/issue-90762.rs tests/ui/consts/load-preserves-partial-init.rs -tests/ui/consts/locals-in-const-fn.rs tests/ui/consts/mut-ptr-to-static.rs -tests/ui/consts/offset.rs tests/ui/consts/promoted_const_call4.rs tests/ui/consts/promotion-mutable-ref.rs tests/ui/consts/references.rs @@ -777,7 +751,6 @@ tests/ui/issues/issue-12677.rs tests/ui/issues/issue-12744.rs tests/ui/issues/issue-12860.rs tests/ui/issues/issue-12909.rs -tests/ui/issues/issue-13027.rs tests/ui/issues/issue-13204.rs tests/ui/issues/issue-13323.rs tests/ui/issues/issue-13434.rs @@ -853,7 +826,6 @@ tests/ui/issues/issue-23891.rs tests/ui/issues/issue-24533.rs tests/ui/issues/issue-24779.rs tests/ui/issues/issue-25089.rs -tests/ui/issues/issue-25145.rs tests/ui/issues/issue-25497.rs tests/ui/issues/issue-25515.rs tests/ui/issues/issue-25549-multiple-drop.rs @@ -876,7 +848,6 @@ tests/ui/issues/issue-28498-ugeh-ex1.rs tests/ui/issues/issue-28550.rs tests/ui/issues/issue-29053.rs tests/ui/issues/issue-29071-2.rs -tests/ui/issues/issue-29147-rpass.rs tests/ui/issues/issue-2935.rs tests/ui/issues/issue-29466.rs tests/ui/issues/issue-29668.rs @@ -1069,7 +1040,6 @@ tests/ui/match/issue-114691.rs tests/ui/match/issue-115681.rs tests/ui/match/issue-11940.rs tests/ui/match/issue-26251.rs -tests/ui/match/issue-36401.rs tests/ui/match/issue-42679.rs tests/ui/match/issue-72680.rs tests/ui/match/match-float.rs @@ -1116,7 +1086,6 @@ tests/ui/mir/mir_overflow_off.rs tests/ui/mir/mir_raw_fat_ptr.rs tests/ui/mir/mir_temp_promotions.rs tests/ui/mir/validate/needs-reveal-all.rs -tests/ui/monomorphize-abi-alignment.rs tests/ui/moves/move-1-unique.rs tests/ui/moves/move-2.rs tests/ui/moves/move-2-unique.rs @@ -1171,7 +1140,6 @@ tests/ui/numbers-arithmetic/overflow-attribute-works-2.rs tests/ui/numbers-arithmetic/saturating-float-casts.rs tests/ui/numbers-arithmetic/saturating-float-casts-wasm.rs tests/ui/numbers-arithmetic/shift-near-oflo.rs -tests/ui/numbers-arithmetic/shift.rs tests/ui/numbers-arithmetic/u128-as-f32.rs tests/ui/numbers-arithmetic/u128.rs tests/ui/numbers-arithmetic/unary-minus-suffix-inference.rs @@ -1306,7 +1274,6 @@ tests/ui/regions/regions-self-in-enums.rs tests/ui/regions/regions-simple.rs tests/ui/regions/regions-static-closure.rs tests/ui/regions/regions-trait-object-1.rs -tests/ui/repeat-expr/repeat-expr-in-static.rs tests/ui/repr/aligned_enum_cast.rs tests/ui/repr/repr_c_int_align.rs tests/ui/resolve/blind-item-local-shadow.rs @@ -1390,7 +1357,6 @@ tests/ui/self/string-self-append.rs tests/ui/self/ufcs-explicit-self.rs tests/ui/self/uniq-self-in-mut-slot.rs tests/ui/self/where-for-self.rs -tests/ui/sepcomp/sepcomp-statics.rs tests/ui/sepcomp/sepcomp-unwind.rs tests/ui/simd/array-type.rs tests/ui/simd/generics.rs @@ -1430,9 +1396,7 @@ tests/ui/specialization/specialization-assoc-fns.rs tests/ui/specialization/specialization-basics.rs tests/ui/specialization/specialization-default-methods.rs tests/ui/sse2.rs -tests/ui/static/refer-to-other-statics-by-value.rs tests/ui/statics/const_generics.rs -tests/ui/statics/issue-17233.rs tests/ui/statics/static-function-pointer.rs tests/ui/statics/static-impl.rs tests/ui/statics/static-promotion.rs @@ -1455,7 +1419,6 @@ tests/ui/structs-enums/class-impl-very-parameterized-trait.rs tests/ui/structs-enums/class-poly-methods.rs tests/ui/structs-enums/class-separate-impl.rs tests/ui/structs-enums/class-str-field.rs -tests/ui/structs-enums/codegen-tag-static-padding.rs tests/ui/structs-enums/empty-tag.rs tests/ui/structs-enums/enum-alignment.rs tests/ui/structs-enums/enum-clike-ffi-as-int.rs @@ -1465,7 +1428,6 @@ tests/ui/structs-enums/enum-disr-val-pretty.rs tests/ui/structs-enums/enum-non-c-like-repr-c-and-int.rs tests/ui/structs-enums/enum-non-c-like-repr-c.rs tests/ui/structs-enums/enum-non-c-like-repr-int.rs -tests/ui/structs-enums/enum-nullable-const-null-with-fields.rs tests/ui/structs-enums/enum-nullable-simplifycfg-misopt.rs tests/ui/structs-enums/enum-null-pointer-opt.rs tests/ui/structs-enums/enum-univariant-repr.rs @@ -1604,7 +1566,6 @@ tests/ui/traits/issue-9394-inherited-calls.rs tests/ui/traits/kindck-owned-contains-1.rs tests/ui/traits/monad.rs tests/ui/traits/multidispatch-conditional-impl-not-considered.rs -tests/ui/traits/next-solver/alias-bound-preference.rs tests/ui/traits/next-solver/dyn-any-dont-prefer-impl.rs tests/ui/traits/object/auto-dedup.rs tests/ui/traits/object/exclusion.rs @@ -1683,7 +1644,6 @@ tests/ui/unboxed-closures/unboxed-closures-prelude.rs tests/ui/unboxed-closures/unboxed-closures-single-word-env.rs tests/ui/unboxed-closures/unboxed-closures-sugar-object.rs tests/ui/unboxed-closures/unboxed-closures-zero-args.rs -tests/ui/union/union-align.rs tests/ui/union/union-const-codegen.rs tests/ui/union/union-const-eval-field.rs tests/ui/union/union-drop-assign.rs diff --git a/kmir/src/tests/integration/data/prove-rs/intrinsics.rs b/kmir/src/tests/integration/data/prove-rs/intrinsics.rs index 073d0fcc2..02f2597f3 100644 --- a/kmir/src/tests/integration/data/prove-rs/intrinsics.rs +++ b/kmir/src/tests/integration/data/prove-rs/intrinsics.rs @@ -59,3 +59,17 @@ pub fn test_ctlz_nonzero() { let r = unsafe { intrinsics::ctlz_nonzero(x) }; assert!(r == 31); } + +#[no_mangle] +pub fn test_size_of_val() { + let x: u32 = 0; + let r = unsafe { intrinsics::size_of_val(&x as *const u32) }; + assert!(r == 4); +} + +#[no_mangle] +pub fn test_min_align_of_val() { + let x: u32 = 0; + let r = unsafe { intrinsics::min_align_of_val(&x as *const u32) }; + assert!(r == 4); +} diff --git a/kmir/src/tests/integration/test_integration.py b/kmir/src/tests/integration/test_integration.py index 1ad957c62..02875dd71 100644 --- a/kmir/src/tests/integration/test_integration.py +++ b/kmir/src/tests/integration/test_integration.py @@ -28,7 +28,15 @@ PROVE_DIR = (Path(__file__).parent / 'data' / 'prove-rs').resolve(strict=True) PROVE_FILES = list(PROVE_DIR.glob('*.*')) PROVE_START_SYMBOLS = { - 'intrinsics': ['main', 'test_rotate_left', 'test_bswap', 'test_ctpop', 'test_ctlz_nonzero'], + 'intrinsics': [ + 'main', + 'test_rotate_left', + 'test_bswap', + 'test_ctpop', + 'test_ctlz_nonzero', + 'test_size_of_val', + 'test_min_align_of_val', + ], 'symbolic-args-fail': ['main', 'eats_all_args'], 'symbolic-structs-fail': ['eats_struct_args'], 'unchecked_arithmetic': ['unchecked_add_i32', 'unchecked_sub_usize', 'unchecked_mul_isize'],