From b77ee6380e15842bb045d840e5532e99d5662e93 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 19 Nov 2023 19:14:17 -0500 Subject: [PATCH] MIR enums This adds basic support for enums in the MIR backend. In particular: * There is now a `mir_enum_value : MIRAdt -> String -> [MIRValue] -> MIRValue` function that constructs a value representing a specific enum variant, where the `String` indicates which variant to use. * The `mir_fresh_expanded_value` command can now create symbolic enum values. Implementation-wise, much of the complexity in this patch arises from the fact that MIR enums are represented with `VariantType`s at the Crucible level, which are a fair bit more involved than the `StructType`s used to power MIR structs. Some highlights of the implementation are: * There is now a new `EnumShape` constructor for `TypeShape`, which is in turn defined in terms of a new `VariantShape` data type that characterizes the shapes of all the fields in an enum variant. * There is a `MirSetupEnum` data type (exported by `SAWScript.Crucible.MIR.MethodSpecIR`) which categorizes the different forms of enum `MIRValue`s that one can construct. Currently, there is `MirSetupEnumVariant` (which is what `mir_enum_value` returns) and `MirSetupEnumSymbolic` (which is what `mir_fresh_expanded_value` returns when it creates a fresh enum value). * The implementation of symbolic enum values in particular is somewhat complicated. I have written `Note [Symbolic enums]` to go over the general approach and highlight some potential pitfalls in implementing them. * For now, there is no `crux-mir-comp` support for enums. We could conceivable add support, but there is not a pressing need to do so right now. I have opened https://github.com/GaloisInc/saw-script/issues/1990 as a reminder to do this later. This checks off one box in #1859. --- .../src/Mir/Compositional/Builder.hs | 11 + .../src/Mir/Compositional/Clobber.hs | 4 + .../src/Mir/Compositional/Override.hs | 2 + crux-mir-comp/src/Mir/Cryptol.hs | 2 + doc/manual/manual.md | 155 +++++- doc/manual/manual.pdf | Bin 587259 -> 593347 bytes .../Makefile | 13 + .../test.linked-mir.json | 1 + .../test.rs | 14 + .../test.saw | 43 ++ .../test.sh | 3 + intTests/test_mir_verify_enums/Makefile | 13 + .../test.linked-mir.json | 1 + intTests/test_mir_verify_enums/test.rs | 35 ++ intTests/test_mir_verify_enums/test.saw | 78 +++ intTests/test_mir_verify_enums/test.sh | 3 + saw-remote-api/CHANGELOG.md | 1 + saw-remote-api/python/CHANGELOG.md | 1 + saw-remote-api/python/saw_client/crucible.py | 29 ++ .../saw/test-files/mir_enums.linked-mir.json | 1 + .../python/tests/saw/test-files/mir_enums.rs | 35 ++ ..._fresh_expanded_value_enum.linked-mir.json | 1 + .../mir_fresh_expanded_value_enum.rs | 14 + .../python/tests/saw/test_mir_enums.py | 136 +++++ .../saw/test_mir_fresh_expanded_value_enum.py | 99 ++++ saw-remote-api/src/SAWServer.hs | 1 + .../src/SAWServer/Data/SetupValue.hs | 3 + .../src/SAWServer/JVMCrucibleSetup.hs | 2 + .../src/SAWServer/LLVMCrucibleSetup.hs | 2 + .../src/SAWServer/MIRCrucibleSetup.hs | 22 +- saw-script.cabal | 1 + src/SAWScript/Crucible/Common/MethodSpec.hs | 19 +- src/SAWScript/Crucible/Common/Setup/Value.hs | 6 + src/SAWScript/Crucible/JVM/Override.hs | 2 + .../Crucible/JVM/ResolveSetupValue.hs | 2 + src/SAWScript/Crucible/JVM/Setup/Value.hs | 1 + src/SAWScript/Crucible/LLVM/Override.hs | 4 + .../Crucible/LLVM/ResolveSetupValue.hs | 4 + src/SAWScript/Crucible/LLVM/Setup/Value.hs | 1 + src/SAWScript/Crucible/MIR/Builtins.hs | 192 ++++++- src/SAWScript/Crucible/MIR/MethodSpecIR.hs | 3 + src/SAWScript/Crucible/MIR/Override.hs | 174 +++++-- .../Crucible/MIR/ResolveSetupValue.hs | 468 ++++++++++++++++-- src/SAWScript/Crucible/MIR/Setup/Value.hs | 206 ++++++++ src/SAWScript/Crucible/MIR/TypeShape.hs | 120 ++++- src/SAWScript/Interpreter.hs | 9 + 46 files changed, 1828 insertions(+), 109 deletions(-) create mode 100644 intTests/test_mir_fresh_expanded_value_enum/Makefile create mode 100644 intTests/test_mir_fresh_expanded_value_enum/test.linked-mir.json create mode 100644 intTests/test_mir_fresh_expanded_value_enum/test.rs create mode 100644 intTests/test_mir_fresh_expanded_value_enum/test.saw create mode 100755 intTests/test_mir_fresh_expanded_value_enum/test.sh create mode 100644 intTests/test_mir_verify_enums/Makefile create mode 100644 intTests/test_mir_verify_enums/test.linked-mir.json create mode 100644 intTests/test_mir_verify_enums/test.rs create mode 100644 intTests/test_mir_verify_enums/test.saw create mode 100755 intTests/test_mir_verify_enums/test.sh create mode 100644 saw-remote-api/python/tests/saw/test-files/mir_enums.linked-mir.json create mode 100644 saw-remote-api/python/tests/saw/test-files/mir_enums.rs create mode 100644 saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.linked-mir.json create mode 100644 saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.rs create mode 100644 saw-remote-api/python/tests/saw/test_mir_enums.py create mode 100644 saw-remote-api/python/tests/saw/test_mir_fresh_expanded_value_enum.py diff --git a/crucible-mir-comp/src/Mir/Compositional/Builder.hs b/crucible-mir-comp/src/Mir/Compositional/Builder.hs index b8271368d6..c3009850e7 100644 --- a/crucible-mir-comp/src/Mir/Compositional/Builder.hs +++ b/crucible-mir-comp/src/Mir/Compositional/Builder.hs @@ -629,6 +629,7 @@ substMethodSpec sc sm ms = do MS.SetupStruct b svs -> MS.SetupStruct b <$> mapM goSetupValue svs MS.SetupTuple b svs -> MS.SetupTuple b <$> mapM goSetupValue svs MS.SetupSlice slice -> MS.SetupSlice <$> goSetupSlice slice + MS.SetupEnum enum_ -> MS.SetupEnum <$> goSetupEnum enum_ MS.SetupArray b svs -> MS.SetupArray b <$> mapM goSetupValue svs MS.SetupElem b sv idx -> MS.SetupElem b <$> goSetupValue sv <*> pure idx MS.SetupField b sv name -> MS.SetupField b <$> goSetupValue sv <*> pure name @@ -644,6 +645,14 @@ substMethodSpec sc sm ms = do goSetupCondition (MS.SetupCond_Ghost loc gg tt) = MS.SetupCond_Ghost loc gg <$> goTypedTerm tt + goSetupEnum (MirSetupEnumVariant adt variant variantIdx svs) = + MirSetupEnumVariant adt variant variantIdx <$> + mapM goSetupValue svs + goSetupEnum (MirSetupEnumSymbolic adt discr variants) = + MirSetupEnumSymbolic adt <$> + goSetupValue discr <*> + mapM (mapM goSetupValue) variants + goSetupSlice (MirSetupSliceRaw ref len) = MirSetupSliceRaw <$> goSetupValue ref <*> goSetupValue len goSetupSlice (MirSetupSlice arr) = @@ -742,6 +751,8 @@ regToSetup bak p eval shp rv = go shp rv refSV <- go refShp refRV lenSV <- go lenShp lenRV pure $ MS.SetupSlice $ MirSetupSliceRaw refSV lenSV + go (EnumShape _ _ _ _ _) _ = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _ = error "Function pointers not currently supported in overrides" diff --git a/crucible-mir-comp/src/Mir/Compositional/Clobber.hs b/crucible-mir-comp/src/Mir/Compositional/Clobber.hs index f9bebc062d..e2288de83c 100644 --- a/crucible-mir-comp/src/Mir/Compositional/Clobber.hs +++ b/crucible-mir-comp/src/Mir/Compositional/Clobber.hs @@ -62,6 +62,8 @@ clobberSymbolic sym loc nameStr shp rv = go shp rv ", but got Any wrapping " ++ show tpr where shpTpr = StructRepr $ fmapFC fieldShapeType flds go (TransparentShape _ shp) rv = go shp rv + go (EnumShape _ _ _ _ _) _rv = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _rv = error "Function pointers not currently supported in overrides" go (RefShape _ _ _ _) _rv = error "clobberSymbolic: RefShape NYI" @@ -120,6 +122,8 @@ clobberImmutSymbolic sym loc nameStr shp rv = go shp rv ref' <- go refShp ref len' <- go lenShp len pure $ Ctx.Empty Ctx.:> RV ref' Ctx.:> RV len' + go (EnumShape _ _ _ _ _) _rv = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _rv = error "Function pointers not currently supported in overrides" diff --git a/crucible-mir-comp/src/Mir/Compositional/Override.hs b/crucible-mir-comp/src/Mir/Compositional/Override.hs index ea63c2122f..e83d18eea6 100644 --- a/crucible-mir-comp/src/Mir/Compositional/Override.hs +++ b/crucible-mir-comp/src/Mir/Compositional/Override.hs @@ -544,6 +544,8 @@ setupToReg sym sc termSub regMap allocMap shp sv = go shp sv refRV <- go refShp refSV lenRV <- go lenShp lenSV pure $ Ctx.Empty Ctx.:> RV refRV Ctx.:> RV lenRV + go (EnumShape _ _ _ _ _) _ = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _ = error "Function pointers not currently supported in overrides" go shp sv = error $ "setupToReg: type error: bad SetupValue for " ++ show (shapeType shp) ++ diff --git a/crux-mir-comp/src/Mir/Cryptol.hs b/crux-mir-comp/src/Mir/Cryptol.hs index 08bf240b29..df09f9b4dc 100644 --- a/crux-mir-comp/src/Mir/Cryptol.hs +++ b/crux-mir-comp/src/Mir/Cryptol.hs @@ -337,6 +337,8 @@ munge sym shp rv = do AnyValue tpr <$> goFields flds rvs | otherwise = error $ "munge: StructShape AnyValue with NYI TypeRepr " ++ show tpr go (TransparentShape _ shp) rv = go shp rv + go (EnumShape _ _ _ _ _) _ = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _ = error "Function pointers not currently supported in overrides" -- TODO: RefShape diff --git a/doc/manual/manual.md b/doc/manual/manual.md index b6e5beb656..9e178fae1f 100644 --- a/doc/manual/manual.md +++ b/doc/manual/manual.md @@ -2117,12 +2117,9 @@ mir_verify : ### Running a MIR-based verification -`mir_verify` requires `enable_experimental` in order to be used. Moreover, -some parts of `mir_verify` are not currently implemented, so it is possible -that using `mir_verify` on some programs will fail. Features that are not yet -implemented include the following: - -* The ability to construct MIR `enum` values in specifications +(Note: API functions involving MIR verification require `enable_experimental` +in order to be used. As such, some parts of this API may change before being +finalized.) The `String` supplied as an argument to `mir_verify` is expected to be a function _identifier_. An identifier is expected adhere to one of the following @@ -2212,6 +2209,14 @@ internally. The second parameter is the LLVM, Java, or MIR type of the variable. The resulting `Term` can be used in various subsequent commands. +Note that the second parameter to `{llvm,jvm,mir}_fresh_var` must be a type +that has a counterpart in Cryptol. (For more information on this, refer to the +"Cryptol type correspondence" section.) If the type does not have a Cryptol +counterpart, the function will raise an error. If you do need to create a fresh +value of a type that cannot be represented in Cryptol, consider using a +function such as `llvm_fresh_expanded_val` (for LLVM verification) or +`mir_fresh_expanded_value` (for MIR verification). + LLVM types are built with this set of functions: * `llvm_int : Int -> LLVMType` @@ -2306,6 +2311,86 @@ The `llvm_term`, `jvm_term`, and `mir_term` functions create a `SetupValue`, * `jvm_term : Term -> JVMValue` * `mir_term : Term -> MIRValue` +The value that these functions return will have an LLVM, JVM, or MIR type +corresponding to the Cryptol type of the `Term` argument. (For more information +on this, refer to the "Cryptol type correspondence" section.) If the type does +not have a Cryptol counterpart, the function will raise an error. + +### Cryptol type correspondence + +The `{llvm,jvm,mir}_fresh_var` functions take an LLVM, JVM, or MIR type as an +argument and produces a `Term` variable of the corresponding Cryptol type as +output. Similarly, the `{llvm,jvm,mir}_term` functions take a Cryptol `Term` as +input and produce a value of the corresponding LLVM, JVM, or MIR type as +output. This section describes precisely which types can be converted to +Cryptol types (and vice versa) in this way. + +#### LLVM verification + +The following LLVM types correspond to Cryptol types: + +* `llvm_alias `: Corresponds to the same Cryptol type as the type used + in the definition of ``. +* `llvm_array `: Corresponds to the Cryptol sequence `[][]`, + where `` is the Cryptol type corresponding to ``. +* `llvm_int `: Corresponds to the Cryptol word `[]`. +* `llvm_struct [, ..., ]` and `llvm_packed_struct [, ..., ]`: + Corresponds to the Cryptol tuple `(, ..., )`, where `` + is the Cryptol type corresponding to `` for each `i` ranging from `1` + to `n`. + +The following LLVM types do _not_ correspond to Cryptol types: + +* `llvm_double` +* `llvm_float` +* `llvm_pointer` + +#### JVM verification + +The following Java types correspond to Cryptol types: + +* `java_array `: Corresponds to the Cryptol sequence `[][]`, + where `` is the Cryptol type corresponding to ``. +* `java_bool`: Corresponds to the Cryptol `Bit` type. +* `java_byte`: Corresponds to the Cryptol `[8]` type. +* `java_char`: Corresponds to the Cryptol `[16]` type. +* `java_int`: Corresponds to the Cryptol `[32]` type. +* `java_long`: Corresponds to the Cryptol `[64]` type. +* `java_short`: Corresponds to the Cryptol `[16]` type. + +The following Java types do _not_ correspond to Cryptol types: + +* `java_class` +* `java_double` +* `java_float` + +#### MIR verification + +The following MIR types correspond to Cryptol types: + +* `mir_array `: Corresponds to the Cryptol sequence `[][]`, + where `` is the Cryptol type corresponding to ``. +* `mir_bool`: Corresponds to the Cryptol `Bit` type. +* `mir_char`: Corresponds to the Cryptol `[32]` type. +* `mir_i8` and `mir_u8`: Corresponds to the Cryptol `[8]` type. +* `mir_i16` and `mir_u16`: Corresponds to the Cryptol `[16]` type. +* `mir_i32` and `mir_u32`: Corresponds to the Cryptol `[32]` type. +* `mir_i64` and `mir_u64`: Corresponds to the Cryptol `[64]` type. +* `mir_i128` and `mir_u128`: Corresponds to the Cryptol `[128]` type. +* `mir_isize` and `mir_usize`: Corresponds to the Cryptol `[32]` type. +* `mir_tuple [, ..., ]`: Corresponds to the Cryptol tuple + `(, ..., )`, where `` is the Cryptol type corresponding + to `` for each `i` ranging from `1` to `n`. + +The following MIR types do _not_ correspond to Cryptol types: + +* `mir_adt` +* `mir_f32` +* `mir_f64` +* `mir_ref` and `mir_ref_mut` +* `mir_slice` +* `mir_str` + ## Executing Once the initial state has been configured, the `{llvm,jvm,mir}_execute_func` @@ -2926,6 +3011,15 @@ construct compound values: * `mir_array_value : MIRType -> [MIRValue] -> MIRValue` constructs an array of the given type whose elements consist of the given values. Supplying the element type is necessary to support length-0 arrays. +* `mir_enum_value : MIRAdt -> String -> [MIRValue] -> MIRValue` constructs an + enum using a particular enum variant. The `MIRAdt` arguments determines what + enum type to create, the `String` value determines the name of the variant to + use, and the `[MIRValue]` list are the values to use as elements in the + variant. + + See the "Finding MIR alegraic data types" section (as well as the "Enums" + subsection") for more information on how to compute a `MIRAdt` value to pass + to `mir_enum_value`. * `mir_slice_value : MIRValue -> MIRValue`: see the "MIR slices" section below. * `mir_slice_range_value : MIRValue -> Int -> Int -> MIRValue`: see the "MIR slices" section below. @@ -3102,9 +3196,52 @@ s_8_16 <- mir_find_adt m "example::S" [mir_u8, mir_u16]; s_32_64 <- mir_find_adt m "example::S" [mir_u32, mir_u64]; ~~~~ -The `mir_adt` command (for constructing a struct type) and `mir_struct_value` -(for constructing a struct value) commands in turn take a `MIRAdt` as an -argument. +The `mir_adt` command (for constructing a struct type), `mir_struct_value` (for +constructing a struct value), and `mir_enum_value` (for constructing an enum +value) commands in turn take a `MIRAdt` as an argument. + +#### Enums + +In addition to taking a `MIRAdt` as an argument, `mir_enum_value` also takes a +`String` representing the name of the variant to construct. The variant name +should be a short name such as `"None"` or `"Some"`, and not a full identifier +such as `"core::option::None"` or `"core::option::Some"`. This is because the +`MIRAdt` already contains the full identifiers for all of an enum's variants, +so SAW will use this information to look up a variant's identifier from a short +name. Here is an example of using `mir_enum_value` in practice: + +~~~~ .rs +pub fn n() -> Option { + None +} + +pub fn s(x: u32) -> Option { + Some(x) +} +~~~~ +~~~~ +m <- mir_load_module "example.linked-mir.json"; + +option_u32 <- mir_find_adt m "core::option::Option" [mir_u32]; + +let n_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value option_u32 "None" []); +}; + +let s_spec = do { + x <- mir_fresh_var "x" mir_u32; + + mir_execute_func [mir_term x]; + + mir_return (mir_enum_value option_u32 "Some" [mir_term x]); +}; +~~~~ + +Note that `mir_enum_value` can only be used to construct a specific variant. If +you need to construct a symbolic enum value that can range over many potential +variants, use `mir_fresh_expanded_value` instead. ### Bitfields diff --git a/doc/manual/manual.pdf b/doc/manual/manual.pdf index 67f1cbdc2db4c2a4e2ae61618dac5f03424dbeab..a7fa7aed74fe9b95d43a663b7ba0f5a230ad0699 100644 GIT binary patch delta 193146 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 S5`u_8gaolzSY*}Zu>KFJpou*I delta 187090 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 z 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 lCeuYCV{$7Att{?-hx) -> u32 { + match x { + Some(x) => x, + None => 27, + } +} + +pub fn g(x: Option) { + f(x); +} + +pub fn gg(x: Option) { + g(x); +} diff --git a/intTests/test_mir_fresh_expanded_value_enum/test.saw b/intTests/test_mir_fresh_expanded_value_enum/test.saw new file mode 100644 index 0000000000..d3c9712f2c --- /dev/null +++ b/intTests/test_mir_fresh_expanded_value_enum/test.saw @@ -0,0 +1,43 @@ +enable_experimental; + +m <- mir_load_module "test.linked-mir.json"; + +let option_u32_adt = mir_find_adt m "core::option::Option" [mir_u32]; + +let f_none_spec = do { + let x = mir_enum_value option_u32_adt "None" []; + + mir_execute_func [x]; + + mir_return (mir_term {{ 27 : [32] }}); +}; + +let f_some_spec = do { + ret <- mir_fresh_var "ret" mir_u32; + let x = mir_enum_value option_u32_adt "Some" [mir_term ret]; + + mir_execute_func [x]; + + mir_return (mir_term ret); +}; + +let g_spec = do { + x <- mir_fresh_expanded_value "x" (mir_adt option_u32_adt); + + mir_execute_func [x]; +}; + +let gg_spec = do { + xx <- mir_fresh_expanded_value "xx" (mir_adt option_u32_adt); + + mir_execute_func [xx]; +}; + +f_none_ov <- mir_verify m "test::f" [] false f_none_spec z3; +f_some_ov <- mir_verify m "test::f" [] false f_some_spec z3; + +mir_verify m "test::g" [] false g_spec z3; +g_ov <- mir_verify m "test::g" [f_none_ov, f_some_ov] false g_spec z3; + +mir_verify m "test::gg" [] false gg_spec z3; +mir_verify m "test::gg" [g_ov] false gg_spec z3; diff --git a/intTests/test_mir_fresh_expanded_value_enum/test.sh b/intTests/test_mir_fresh_expanded_value_enum/test.sh new file mode 100755 index 0000000000..2315cc233c --- /dev/null +++ b/intTests/test_mir_fresh_expanded_value_enum/test.sh @@ -0,0 +1,3 @@ +set -e + +$SAW test.saw diff --git a/intTests/test_mir_verify_enums/Makefile b/intTests/test_mir_verify_enums/Makefile new file mode 100644 index 0000000000..bc6297ae15 --- /dev/null +++ b/intTests/test_mir_verify_enums/Makefile @@ -0,0 +1,13 @@ +all: test.linked-mir.json + +test.linked-mir.json: test.rs + saw-rustc $< + $(MAKE) remove-unused-build-artifacts + +.PHONY: remove-unused-build-artifacts +remove-unused-build-artifacts: + rm -f test libtest.mir libtest.rlib + +.PHONY: clean +clean: remove-unused-build-artifacts + rm -f test.linked-mir.json diff --git a/intTests/test_mir_verify_enums/test.linked-mir.json b/intTests/test_mir_verify_enums/test.linked-mir.json new file mode 100644 index 0000000000..0b503737b6 --- /dev/null +++ b/intTests/test_mir_verify_enums/test.linked-mir.json @@ -0,0 +1 @@ +{"fns":[{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"test.rs:17:5: 17:9"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:17:5: 17:9","variant_index":0}],"terminator":{"kind":"Return","pos":"test.rs:18:2: 18:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"test/f696fd3c::h_none","return_ty":"ty::Adt::3fa7c2d95c7fce06","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"test.rs:30:5: 30:11"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::7746688b48f54a60"}},"pos":"test.rs:30:5: 30:11","variant_index":0}],"terminator":{"kind":"Return","pos":"test.rs:31:2: 31:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::7746688b48f54a60"}]},"name":"test/f696fd3c::i42","return_ty":"ty::Adt::7746688b48f54a60","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::bool"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"}},"pos":"test.rs:9:8: 9:9","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::bool"}},"kind":"Copy"}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"}},"kind":"Move"},"discr_span":"test.rs:9:8: 9:9 !test.rs:9:8: 9:9","kind":"SwitchInt","pos":"test.rs:9:8: 9:9 !test.rs:9:8: 9:9","switch_ty":"ty::bool","targets":["bb2","bb1"],"values":["0"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Deinit","pos":"test.rs:10:11: 10:15"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:10:11: 10:15","variant_index":0}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"bb3"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::935b79106a1ed847"},"kind":"Constant"},"kind":"Call","pos":"test.rs:10:9: 10:16"}},"blockid":"bb1"},{"block":{"data":[{"kind":"Deinit","pos":"test.rs:12:11: 12:19"},{"kind":"Assign","lhs":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:12:11: 12:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"42"},"ty":"ty::u32"},"kind":"Constant"}}},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:12:11: 12:19","variant_index":1}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"bb3"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::935b79106a1ed847"},"kind":"Constant"},"kind":"Call","pos":"test.rs:12:9: 12:20"}},"blockid":"bb2"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"test.rs:14:2: 14:2"}},"blockid":"bb3"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"test/f696fd3c::g","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"test.rs:34:5: 34:11"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::7746688b48f54a60"}},"pos":"test.rs:34:5: 34:11","variant_index":1}],"terminator":{"kind":"Return","pos":"test.rs:35:2: 35:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::7746688b48f54a60"}]},"name":"test/f696fd3c::i43","return_ty":"ty::Adt::7746688b48f54a60","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"pos":"test.rs:2:11: 2:12","rhs":{"kind":"Discriminant","ty":"ty::isize","val":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"kind":"Move"},"discr_span":"test.rs:3:9: 3:16","kind":"SwitchInt","pos":"test.rs:2:5: 2:12","switch_ty":"ty::isize","targets":["bb1","bb3","bb2"],"values":["0","1"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"test.rs:4:17: 4:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"27"},"ty":"ty::u32"},"kind":"Constant"}}}],"terminator":{"kind":"Goto","pos":"test.rs:4:17: 4:19","target":"bb4"}},"blockid":"bb1"},{"block":{"data":[],"terminator":{"kind":"Unreachable","pos":"test.rs:2:11: 2:12"}},"blockid":"bb2"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"pos":"test.rs:3:14: 3:15","rhs":{"kind":"Use","usevar":{"data":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}},{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"test.rs:3:20: 3:21","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"kind":"Copy"}}}],"terminator":{"kind":"Goto","pos":"test.rs:3:20: 3:21","target":"bb4"}},"blockid":"bb3"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"test.rs:6:2: 6:2"}},"blockid":"bb4"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"},{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}]},"name":"test/f696fd3c::f","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::u32"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}},"pos":"test.rs:21:10: 21:11","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::u32"}},"kind":"Copy"}}},{"kind":"Deinit","pos":"test.rs:21:5: 21:12"},{"kind":"Assign","lhs":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:21:5: 21:12","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}},"kind":"Move"}}},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:21:5: 21:12","variant_index":1}],"terminator":{"kind":"Return","pos":"test.rs:22:2: 22:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}]},"name":"test/f696fd3c::h_some","return_ty":"ty::Adt::3fa7c2d95c7fce06","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::isize"}},"pos":"test.rs:25:11: 25:13","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"isize","size":8,"val":"42"},"ty":"ty::isize"},"kind":"Constant"}}}],"terminator":{"kind":"Return","pos":"test.rs:25:11: 25:13"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::isize"}]},"name":"test/f696fd3c::I::I42::{constant#0}","return_ty":"ty::isize","spread_arg":null}],"adts":[{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","orig_substs":["ty::u32"],"repr_transparent":false,"size":8,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"index":0,"kind":"Relative"},"discr_value":"0","fields":[],"inhabited":true,"name":"core/73237d41::option::Option::None"},{"ctor_kind":{"kind":"Fn"},"discr":{"index":1,"kind":"Relative"},"discr_value":"1","fields":[{"name":"core/73237d41::option::Option::Some::0","ty":"ty::u32"}],"inhabited":true,"name":"core/73237d41::option::Option::Some"}]},{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"test/f696fd3c::I::_adtb7803c2264daf0ec[0]","orig_def_id":"test/f696fd3c::I","orig_substs":[],"repr_transparent":false,"size":1,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"kind":"Explicit","name":"test/f696fd3c::I::I42::{constant#0}"},"discr_value":"42","fields":[],"inhabited":true,"name":"test/f696fd3c::I::I42"},{"ctor_kind":{"kind":"Const"},"discr":{"index":1,"kind":"Relative"},"discr_value":"43","fields":[],"inhabited":true,"name":"test/f696fd3c::I::I43"}]}],"statics":[],"vtables":[],"traits":[],"intrinsics":[{"inst":{"def_id":"test/f696fd3c::h_none","kind":"Item","substs":[]},"name":"test/f696fd3c::h_none"},{"inst":{"def_id":"test/f696fd3c::i42","kind":"Item","substs":[]},"name":"test/f696fd3c::i42"},{"inst":{"def_id":"test/f696fd3c::g","kind":"Item","substs":[]},"name":"test/f696fd3c::g"},{"inst":{"def_id":"test/f696fd3c::i43","kind":"Item","substs":[]},"name":"test/f696fd3c::i43"},{"inst":{"def_id":"test/f696fd3c::f","kind":"Item","substs":[]},"name":"test/f696fd3c::f"},{"inst":{"def_id":"test/f696fd3c::h_some","kind":"Item","substs":[]},"name":"test/f696fd3c::h_some"},{"inst":{"def_id":"test/f696fd3c::I::I42::{constant#0}","kind":"Item","substs":[]},"name":"test/f696fd3c::I::I42::{constant#0}"}],"tys":[{"name":"ty::u32","ty":{"kind":"Uint","uintkind":{"kind":"U32"}}},{"name":"ty::Adt::3fa7c2d95c7fce06","ty":{"kind":"Adt","name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","substs":["ty::u32"]}},{"name":"ty::Adt::7746688b48f54a60","ty":{"kind":"Adt","name":"test/f696fd3c::I::_adtb7803c2264daf0ec[0]","orig_def_id":"test/f696fd3c::I","substs":[]}},{"name":"ty::bool","ty":{"kind":"Bool"}},{"name":"ty::FnDef::935b79106a1ed847","ty":{"defid":"test/f696fd3c::f","kind":"FnDef"}},{"name":"ty::isize","ty":{"intkind":{"kind":"Isize"},"kind":"Int"}}],"roots":["test/f696fd3c::f","test/f696fd3c::g","test/f696fd3c::h_none","test/f696fd3c::h_some","test/f696fd3c::i42","test/f696fd3c::i43"]} \ No newline at end of file diff --git a/intTests/test_mir_verify_enums/test.rs b/intTests/test_mir_verify_enums/test.rs new file mode 100644 index 0000000000..e4f25f1e2c --- /dev/null +++ b/intTests/test_mir_verify_enums/test.rs @@ -0,0 +1,35 @@ +pub fn f(x: Option) -> u32 { + match x { + Some(x) => x, + None => 27, + } +} + +pub fn g(b: bool) -> u32 { + if b { + f(None) + } else { + f(Some(42)) + } +} + +pub fn h_none() -> Option { + None +} + +pub fn h_some(x: u32) -> Option { + Some(x) +} + +pub enum I { + I42 = 42, + I43, +} + +pub fn i42() -> I { + I::I42 +} + +pub fn i43() -> I { + I::I43 +} diff --git a/intTests/test_mir_verify_enums/test.saw b/intTests/test_mir_verify_enums/test.saw new file mode 100644 index 0000000000..aa5b84def5 --- /dev/null +++ b/intTests/test_mir_verify_enums/test.saw @@ -0,0 +1,78 @@ +enable_experimental; + +m <- mir_load_module "test.linked-mir.json"; + +let option_u32_adt = mir_find_adt m "core::option::Option" [mir_u32]; +let i_adt = mir_find_adt m "test::I" []; + +let f_none_spec = do { + let x = mir_enum_value option_u32_adt "None" []; + + mir_execute_func [x]; + + mir_return (mir_term {{ 27 : [32] }}); +}; + +let f_some_spec = do { + let ret = mir_term {{ 42 : [32] }}; + let x = mir_enum_value option_u32_adt "Some" [ret]; + + mir_execute_func [x]; + + mir_return ret; +}; + +let g_spec = do { + b <- mir_fresh_var "b" mir_bool; + + mir_execute_func [mir_term b]; + + mir_return (mir_term {{ if b then 27 else 42 : [32] }}); +}; + +let h_none_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value option_u32_adt "None" []); +}; + +let h_some_spec = do { + x <- mir_fresh_var "x" mir_u32; + + mir_execute_func [mir_term x]; + + mir_return (mir_enum_value option_u32_adt "Some" [mir_term x]); +}; + +let i42_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value i_adt "I42" []); +}; + +let i43_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value i_adt "I43" []); +}; + +// `mir_enum_value` should error if it cannot find a variant name. +let i43_bad_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value i_adt "I44" []); +}; + +f_none_ov <- mir_verify m "test::f" [] false f_none_spec z3; +f_some_ov <- mir_verify m "test::f" [] false f_some_spec z3; + +mir_verify m "test::g" [f_none_ov, f_some_ov] false g_spec z3; + +mir_verify m "test::h_none" [] false h_none_spec z3; +mir_verify m "test::h_some" [] false h_some_spec z3; + +mir_verify m "test::i42" [] false i42_spec z3; +mir_verify m "test::i43" [] false i43_spec z3; +fails ( + mir_verify m "test::i43" [] false i43_bad_spec z3 +); diff --git a/intTests/test_mir_verify_enums/test.sh b/intTests/test_mir_verify_enums/test.sh new file mode 100755 index 0000000000..2315cc233c --- /dev/null +++ b/intTests/test_mir_verify_enums/test.sh @@ -0,0 +1,3 @@ +set -e + +$SAW test.saw diff --git a/saw-remote-api/CHANGELOG.md b/saw-remote-api/CHANGELOG.md index 8aafd8075b..c404cbe6d4 100644 --- a/saw-remote-api/CHANGELOG.md +++ b/saw-remote-api/CHANGELOG.md @@ -35,6 +35,7 @@ * Add `"slice"` and `"slice range"` `setup value`s representing slices in MIR verification. Attempting to use these in LLVM or JVM verification will raise an error. +* Add `"enum"` `setup value`s representing enums in MIR verification. * The `SAW/create ghost variable` command and the associated `ghost variable value` value are now supported with JVM and MIR verification. diff --git a/saw-remote-api/python/CHANGELOG.md b/saw-remote-api/python/CHANGELOG.md index b2434fd8fc..53c757fbf8 100644 --- a/saw-remote-api/python/CHANGELOG.md +++ b/saw-remote-api/python/CHANGELOG.md @@ -38,6 +38,7 @@ variable. This function is currently only supported with LLVM and MIR verification, and using this function with JVM verification will raise an error. +* Add an `enum()` function for constructing MIR enum values. * The `create_ghost_variable()` and `ghost_value()` functions are now supported with JVM and MIR verification. diff --git a/saw-remote-api/python/saw_client/crucible.py b/saw-remote-api/python/saw_client/crucible.py index 984d79cc62..93f9827310 100644 --- a/saw-remote-api/python/saw_client/crucible.py +++ b/saw-remote-api/python/saw_client/crucible.py @@ -154,6 +154,22 @@ def to_json(self) -> JSON: 'elements': [fld.to_json() for fld in self.fields], 'MIR ADT server name': self.mir_adt.server_name if self.mir_adt is not None else None} +class EnumVal(SetupVal): + adt : MIRAdt + variant_name : str + fields : List[SetupVal] + + def __init__(self, adt : MIRAdt, variant_name : str, fields : List[SetupVal]) -> None: + self.adt = adt + self.variant_name = variant_name + self.fields = fields + + def to_json(self) -> JSON: + return {'setup value': 'enum', + 'MIR ADT server name': self.adt.server_name, + 'variant name': self.variant_name, + 'elements': [fld.to_json() for fld in self.fields]} + class TupleVal(SetupVal): fields : List[SetupVal] @@ -766,6 +782,19 @@ def elem(base: SetupVal, index: int) -> SetupVal: raise ValueError('elem expected an int, but got {index!r}') return ElemVal(base, index) +def enum(adt : MIRAdt, variant_name : str, *fields : SetupVal) -> SetupVal: + """Returns a MIR enum value (i.e., an ``EnumVal``) whose type corresponds to + the given ``adt``, whose variant corresponds to the given ``variant_name``, + and whose field values correspond to the given ``fields``. + + At present, this is only supported with MIR verification. Using this + function with LLVM or JVM verification will raise an error. + """ + for field in fields: + if not isinstance(field, SetupVal): + raise ValueError('enum expected a SetupVal, but got {field!r}') + return EnumVal(adt, variant_name, list(fields)) + def field(base : SetupVal, field_name : str) -> SetupVal: """Returns the value of struct ``base``'s field ``field_name`` (i.e., a ``FieldVal``). diff --git a/saw-remote-api/python/tests/saw/test-files/mir_enums.linked-mir.json b/saw-remote-api/python/tests/saw/test-files/mir_enums.linked-mir.json new file mode 100644 index 0000000000..d2a9e3e66c --- /dev/null +++ b/saw-remote-api/python/tests/saw/test-files/mir_enums.linked-mir.json @@ -0,0 +1 @@ +{"fns":[{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::bool"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"}},"pos":"mir_enums.rs:9:8: 9:9","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::bool"}},"kind":"Copy"}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"}},"kind":"Move"},"discr_span":"mir_enums.rs:9:8: 9:9 !mir_enums.rs:9:8: 9:9","kind":"SwitchInt","pos":"mir_enums.rs:9:8: 9:9 !mir_enums.rs:9:8: 9:9","switch_ty":"ty::bool","targets":["bb2","bb1"],"values":["0"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:10:11: 10:15"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:10:11: 10:15","variant_index":0}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"bb3"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::be69c9ad94113883"},"kind":"Constant"},"kind":"Call","pos":"mir_enums.rs:10:9: 10:16"}},"blockid":"bb1"},{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:12:11: 12:19"},{"kind":"Assign","lhs":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:12:11: 12:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"42"},"ty":"ty::u32"},"kind":"Constant"}}},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:12:11: 12:19","variant_index":1}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"bb3"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::be69c9ad94113883"},"kind":"Constant"},"kind":"Call","pos":"mir_enums.rs:12:9: 12:20"}},"blockid":"bb2"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_enums.rs:14:2: 14:2"}},"blockid":"bb3"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"mir_enums/284a9f79::g","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:34:5: 34:11"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::d1797ca6daa8927f"}},"pos":"mir_enums.rs:34:5: 34:11","variant_index":1}],"terminator":{"kind":"Return","pos":"mir_enums.rs:35:2: 35:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::d1797ca6daa8927f"}]},"name":"mir_enums/284a9f79::i43","return_ty":"ty::Adt::d1797ca6daa8927f","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:17:5: 17:9"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:17:5: 17:9","variant_index":0}],"terminator":{"kind":"Return","pos":"mir_enums.rs:18:2: 18:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"mir_enums/284a9f79::h_none","return_ty":"ty::Adt::3fa7c2d95c7fce06","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:30:5: 30:11"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::d1797ca6daa8927f"}},"pos":"mir_enums.rs:30:5: 30:11","variant_index":0}],"terminator":{"kind":"Return","pos":"mir_enums.rs:31:2: 31:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::d1797ca6daa8927f"}]},"name":"mir_enums/284a9f79::i42","return_ty":"ty::Adt::d1797ca6daa8927f","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::u32"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}},"pos":"mir_enums.rs:21:10: 21:11","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::u32"}},"kind":"Copy"}}},{"kind":"Deinit","pos":"mir_enums.rs:21:5: 21:12"},{"kind":"Assign","lhs":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:21:5: 21:12","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}},"kind":"Move"}}},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:21:5: 21:12","variant_index":1}],"terminator":{"kind":"Return","pos":"mir_enums.rs:22:2: 22:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}]},"name":"mir_enums/284a9f79::h_some","return_ty":"ty::Adt::3fa7c2d95c7fce06","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"pos":"mir_enums.rs:2:11: 2:12","rhs":{"kind":"Discriminant","ty":"ty::isize","val":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"kind":"Move"},"discr_span":"mir_enums.rs:3:9: 3:16","kind":"SwitchInt","pos":"mir_enums.rs:2:5: 2:12","switch_ty":"ty::isize","targets":["bb1","bb3","bb2"],"values":["0","1"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"mir_enums.rs:4:17: 4:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"27"},"ty":"ty::u32"},"kind":"Constant"}}}],"terminator":{"kind":"Goto","pos":"mir_enums.rs:4:17: 4:19","target":"bb4"}},"blockid":"bb1"},{"block":{"data":[],"terminator":{"kind":"Unreachable","pos":"mir_enums.rs:2:11: 2:12"}},"blockid":"bb2"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"pos":"mir_enums.rs:3:14: 3:15","rhs":{"kind":"Use","usevar":{"data":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}},{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"mir_enums.rs:3:20: 3:21","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"kind":"Copy"}}}],"terminator":{"kind":"Goto","pos":"mir_enums.rs:3:20: 3:21","target":"bb4"}},"blockid":"bb3"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_enums.rs:6:2: 6:2"}},"blockid":"bb4"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"},{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}]},"name":"mir_enums/284a9f79::f","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::isize"}},"pos":"mir_enums.rs:25:11: 25:13","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"isize","size":8,"val":"42"},"ty":"ty::isize"},"kind":"Constant"}}}],"terminator":{"kind":"Return","pos":"mir_enums.rs:25:11: 25:13"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::isize"}]},"name":"mir_enums/284a9f79::I::I42::{constant#0}","return_ty":"ty::isize","spread_arg":null}],"adts":[{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"mir_enums/284a9f79::I::_adtb7803c2264daf0ec[0]","orig_def_id":"mir_enums/284a9f79::I","orig_substs":[],"repr_transparent":false,"size":1,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"kind":"Explicit","name":"mir_enums/284a9f79::I::I42::{constant#0}"},"discr_value":"42","fields":[],"inhabited":true,"name":"mir_enums/284a9f79::I::I42"},{"ctor_kind":{"kind":"Const"},"discr":{"index":1,"kind":"Relative"},"discr_value":"43","fields":[],"inhabited":true,"name":"mir_enums/284a9f79::I::I43"}]},{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","orig_substs":["ty::u32"],"repr_transparent":false,"size":8,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"index":0,"kind":"Relative"},"discr_value":"0","fields":[],"inhabited":true,"name":"core/73237d41::option::Option::None"},{"ctor_kind":{"kind":"Fn"},"discr":{"index":1,"kind":"Relative"},"discr_value":"1","fields":[{"name":"core/73237d41::option::Option::Some::0","ty":"ty::u32"}],"inhabited":true,"name":"core/73237d41::option::Option::Some"}]}],"statics":[],"vtables":[],"traits":[],"intrinsics":[{"inst":{"def_id":"mir_enums/284a9f79::g","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::g"},{"inst":{"def_id":"mir_enums/284a9f79::i43","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::i43"},{"inst":{"def_id":"mir_enums/284a9f79::h_none","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::h_none"},{"inst":{"def_id":"mir_enums/284a9f79::i42","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::i42"},{"inst":{"def_id":"mir_enums/284a9f79::h_some","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::h_some"},{"inst":{"def_id":"mir_enums/284a9f79::f","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::f"},{"inst":{"def_id":"mir_enums/284a9f79::I::I42::{constant#0}","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::I::I42::{constant#0}"}],"tys":[{"name":"ty::bool","ty":{"kind":"Bool"}},{"name":"ty::u32","ty":{"kind":"Uint","uintkind":{"kind":"U32"}}},{"name":"ty::Adt::3fa7c2d95c7fce06","ty":{"kind":"Adt","name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","substs":["ty::u32"]}},{"name":"ty::FnDef::be69c9ad94113883","ty":{"defid":"mir_enums/284a9f79::f","kind":"FnDef"}},{"name":"ty::Adt::d1797ca6daa8927f","ty":{"kind":"Adt","name":"mir_enums/284a9f79::I::_adtb7803c2264daf0ec[0]","orig_def_id":"mir_enums/284a9f79::I","substs":[]}},{"name":"ty::isize","ty":{"intkind":{"kind":"Isize"},"kind":"Int"}}],"roots":["mir_enums/284a9f79::f","mir_enums/284a9f79::g","mir_enums/284a9f79::h_none","mir_enums/284a9f79::h_some","mir_enums/284a9f79::i42","mir_enums/284a9f79::i43"]} \ No newline at end of file diff --git a/saw-remote-api/python/tests/saw/test-files/mir_enums.rs b/saw-remote-api/python/tests/saw/test-files/mir_enums.rs new file mode 100644 index 0000000000..e4f25f1e2c --- /dev/null +++ b/saw-remote-api/python/tests/saw/test-files/mir_enums.rs @@ -0,0 +1,35 @@ +pub fn f(x: Option) -> u32 { + match x { + Some(x) => x, + None => 27, + } +} + +pub fn g(b: bool) -> u32 { + if b { + f(None) + } else { + f(Some(42)) + } +} + +pub fn h_none() -> Option { + None +} + +pub fn h_some(x: u32) -> Option { + Some(x) +} + +pub enum I { + I42 = 42, + I43, +} + +pub fn i42() -> I { + I::I42 +} + +pub fn i43() -> I { + I::I43 +} diff --git a/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.linked-mir.json b/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.linked-mir.json new file mode 100644 index 0000000000..cbd60459f8 --- /dev/null +++ b/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.linked-mir.json @@ -0,0 +1 @@ +{"fns":[{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_fresh_expanded_value_enum.rs:13:7: 13:8","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":true,"mut":{"kind":"Not"},"name":"_2","ty":"ty::Tuple::e93222e871854c41"}},"bb1"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::4ca1625b83958a06"},"kind":"Constant"},"kind":"Call","pos":"mir_fresh_expanded_value_enum.rs:13:5: 13:9"}},"blockid":"bb0"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_fresh_expanded_value_enum.rs:14:2: 14:2"}},"blockid":"bb1"}],"vars":[{"is_zst":true,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Tuple::e93222e871854c41"},{"is_zst":true,"mut":{"kind":"Not"},"name":"_2","ty":"ty::Tuple::e93222e871854c41"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"mir_fresh_expanded_value_enum/b7d178bc::gg","return_ty":"ty::Tuple::e93222e871854c41","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"pos":"mir_fresh_expanded_value_enum.rs:2:11: 2:12","rhs":{"kind":"Discriminant","ty":"ty::isize","val":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"kind":"Move"},"discr_span":"mir_fresh_expanded_value_enum.rs:3:9: 3:16","kind":"SwitchInt","pos":"mir_fresh_expanded_value_enum.rs:2:5: 2:12","switch_ty":"ty::isize","targets":["bb1","bb3","bb2"],"values":["0","1"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"mir_fresh_expanded_value_enum.rs:4:17: 4:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"27"},"ty":"ty::u32"},"kind":"Constant"}}}],"terminator":{"kind":"Goto","pos":"mir_fresh_expanded_value_enum.rs:4:17: 4:19","target":"bb4"}},"blockid":"bb1"},{"block":{"data":[],"terminator":{"kind":"Unreachable","pos":"mir_fresh_expanded_value_enum.rs:2:11: 2:12"}},"blockid":"bb2"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"pos":"mir_fresh_expanded_value_enum.rs:3:14: 3:15","rhs":{"kind":"Use","usevar":{"data":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}},{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"mir_fresh_expanded_value_enum.rs:3:20: 3:21","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"kind":"Copy"}}}],"terminator":{"kind":"Goto","pos":"mir_fresh_expanded_value_enum.rs:3:20: 3:21","target":"bb4"}},"blockid":"bb3"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_fresh_expanded_value_enum.rs:6:2: 6:2"}},"blockid":"bb4"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"},{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}]},"name":"mir_fresh_expanded_value_enum/b7d178bc::f","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_fresh_expanded_value_enum.rs:9:7: 9:8","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_2","ty":"ty::u32"}},"bb1"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::4c1263d320af70d4"},"kind":"Constant"},"kind":"Call","pos":"mir_fresh_expanded_value_enum.rs:9:5: 9:9"}},"blockid":"bb0"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_fresh_expanded_value_enum.rs:10:2: 10:2"}},"blockid":"bb1"}],"vars":[{"is_zst":true,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Tuple::e93222e871854c41"},{"is_zst":false,"mut":{"kind":"Not"},"name":"_2","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"mir_fresh_expanded_value_enum/b7d178bc::g","return_ty":"ty::Tuple::e93222e871854c41","spread_arg":null}],"adts":[{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","orig_substs":["ty::u32"],"repr_transparent":false,"size":8,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"index":0,"kind":"Relative"},"discr_value":"0","fields":[],"inhabited":true,"name":"core/73237d41::option::Option::None"},{"ctor_kind":{"kind":"Fn"},"discr":{"index":1,"kind":"Relative"},"discr_value":"1","fields":[{"name":"core/73237d41::option::Option::Some::0","ty":"ty::u32"}],"inhabited":true,"name":"core/73237d41::option::Option::Some"}]}],"statics":[],"vtables":[],"traits":[],"intrinsics":[{"inst":{"def_id":"mir_fresh_expanded_value_enum/b7d178bc::gg","kind":"Item","substs":[]},"name":"mir_fresh_expanded_value_enum/b7d178bc::gg"},{"inst":{"def_id":"mir_fresh_expanded_value_enum/b7d178bc::f","kind":"Item","substs":[]},"name":"mir_fresh_expanded_value_enum/b7d178bc::f"},{"inst":{"def_id":"mir_fresh_expanded_value_enum/b7d178bc::g","kind":"Item","substs":[]},"name":"mir_fresh_expanded_value_enum/b7d178bc::g"}],"tys":[{"name":"ty::u32","ty":{"kind":"Uint","uintkind":{"kind":"U32"}}},{"name":"ty::Adt::3fa7c2d95c7fce06","ty":{"kind":"Adt","name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","substs":["ty::u32"]}},{"name":"ty::Tuple::e93222e871854c41","ty":{"kind":"Tuple","tys":[]}},{"name":"ty::FnDef::4ca1625b83958a06","ty":{"defid":"mir_fresh_expanded_value_enum/b7d178bc::g","kind":"FnDef"}},{"name":"ty::isize","ty":{"intkind":{"kind":"Isize"},"kind":"Int"}},{"name":"ty::FnDef::4c1263d320af70d4","ty":{"defid":"mir_fresh_expanded_value_enum/b7d178bc::f","kind":"FnDef"}}],"roots":["mir_fresh_expanded_value_enum/b7d178bc::f","mir_fresh_expanded_value_enum/b7d178bc::g","mir_fresh_expanded_value_enum/b7d178bc::gg"]} \ No newline at end of file diff --git a/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.rs b/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.rs new file mode 100644 index 0000000000..86f7563545 --- /dev/null +++ b/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.rs @@ -0,0 +1,14 @@ +pub fn f(x: Option) -> u32 { + match x { + Some(x) => x, + None => 27, + } +} + +pub fn g(x: Option) { + f(x); +} + +pub fn gg(x: Option) { + g(x); +} diff --git a/saw-remote-api/python/tests/saw/test_mir_enums.py b/saw-remote-api/python/tests/saw/test_mir_enums.py new file mode 100644 index 0000000000..490832140c --- /dev/null +++ b/saw-remote-api/python/tests/saw/test_mir_enums.py @@ -0,0 +1,136 @@ +import unittest +from pathlib import Path + +from saw_client import * +from saw_client.crucible import cry_f, enum +from saw_client.mir import Contract, MIRAdt, adt_ty, bool_ty, u32 + + +class FNoneContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = enum(self.adt, 'None') + + self.execute_func(x) + + self.returns_f('27 : [32]') + + +class FSomeContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + ret = cry_f('42 : [32]') + x = enum(self.adt, 'Some', ret) + + self.execute_func(x) + + self.returns(ret) + + +class GContract(Contract): + def specification(self) -> None: + b = self.fresh_var(bool_ty, 'b') + + self.execute_func(b) + + self.returns_f('if {b} then 27 else 42 : [32]') + + +class HNoneContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + self.execute_func() + + self.returns(enum(self.adt, 'None')) + + +class HSomeContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = self.fresh_var(u32, 'x') + + self.execute_func(x) + + self.returns(enum(self.adt, 'Some', x)) + + +class I42Contract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + self.execute_func() + + self.returns(enum(self.adt, 'I42')) + + +class I43Contract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + self.execute_func() + + self.returns(enum(self.adt, 'I43')) + + +class MIRStructsTest(unittest.TestCase): + def test_mir_points_to(self): + connect(reset_server=True) + if __name__ == "__main__": view(LogResults()) + json_name = str(Path('tests', 'saw', 'test-files', 'mir_enums.linked-mir.json')) + mod = mir_load_module(json_name) + + option_adt = mir_find_adt(mod, 'core::option::Option', u32) + i_adt = mir_find_adt(mod, "mir_enums::I") + + f_none_ov = mir_verify(mod, 'mir_enums::f', FNoneContract(option_adt)) + self.assertIs(f_none_ov.is_success(), True) + + f_some_ov = mir_verify(mod, 'mir_enums::f', FSomeContract(option_adt)) + self.assertIs(f_some_ov.is_success(), True) + + g_result = mir_verify(mod, 'mir_enums::g', GContract(), lemmas=[f_none_ov, f_some_ov]) + self.assertIs(g_result.is_success(), True) + + h_none_result = mir_verify(mod, 'mir_enums::h_none', HNoneContract(option_adt)) + self.assertIs(h_none_result.is_success(), True) + + h_some_result = mir_verify(mod, 'mir_enums::h_some', HSomeContract(option_adt)) + self.assertIs(h_some_result.is_success(), True) + + i42_result = mir_verify(mod, 'mir_enums::i42', I42Contract(i_adt)) + self.assertIs(i42_result.is_success(), True) + + i43_result = mir_verify(mod, 'mir_enums::i43', I43Contract(i_adt)) + self.assertIs(i43_result.is_success(), True) + + +if __name__ == "__main__": + unittest.main() diff --git a/saw-remote-api/python/tests/saw/test_mir_fresh_expanded_value_enum.py b/saw-remote-api/python/tests/saw/test_mir_fresh_expanded_value_enum.py new file mode 100644 index 0000000000..341046ce15 --- /dev/null +++ b/saw-remote-api/python/tests/saw/test_mir_fresh_expanded_value_enum.py @@ -0,0 +1,99 @@ +import unittest +from pathlib import Path + +from saw_client import * +from saw_client.crucible import fresh_expanded +from saw_client.mir import Contract, MIRAdt, adt_ty, enum, u32, void + + +class FNoneContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = enum(self.adt, 'None') + + self.execute_func(x) + + self.returns_f('27 : [32]') + + +class FSomeContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + ret = self.fresh_var(u32, 'ret') + x = enum(self.adt, 'Some', ret) + + self.execute_func(x) + + self.returns(ret) + + +class GContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = fresh_expanded('x', adt_ty(self.adt)) + + self.execute_func(x) + + self.returns(void) + + +class GGContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = fresh_expanded('x', adt_ty(self.adt)) + + self.execute_func(x) + + self.returns(void) + + +class MIRFreshExpandedValueTest(unittest.TestCase): + def test_mir_fresh_expanded_value(self): + connect(reset_server=True) + if __name__ == "__main__": view(LogResults()) + json_name = str(Path('tests', 'saw', 'test-files', 'mir_fresh_expanded_value_enum.linked-mir.json')) + mod = mir_load_module(json_name) + + option_u32_adt = mir_find_adt(mod, 'core::option::Option', u32) + + f_none_ov = mir_verify(mod, 'mir_fresh_expanded_value_enum::f', FNoneContract(option_u32_adt)) + self.assertIs(f_none_ov.is_success(), True) + + f_some_ov = mir_verify(mod, 'mir_fresh_expanded_value_enum::f', FSomeContract(option_u32_adt)) + self.assertIs(f_some_ov.is_success(), True) + + g_ov_1 = mir_verify(mod, 'mir_fresh_expanded_value_enum::g', GContract(option_u32_adt)) + self.assertIs(g_ov_1.is_success(), True) + + g_ov_2 = mir_verify(mod, 'mir_fresh_expanded_value_enum::g', GContract(option_u32_adt), lemmas=[f_none_ov, f_some_ov]) + self.assertIs(g_ov_2.is_success(), True) + + gg_ov_1 = mir_verify(mod, 'mir_fresh_expanded_value_enum::gg', GGContract(option_u32_adt)) + self.assertIs(gg_ov_1.is_success(), True) + + gg_ov_2 = mir_verify(mod, 'mir_fresh_expanded_value_enum::gg', GGContract(option_u32_adt), lemmas=[g_ov_2]) + self.assertIs(gg_ov_2.is_success(), True) + + +if __name__ == "__main__": + unittest.main() diff --git a/saw-remote-api/src/SAWServer.hs b/saw-remote-api/src/SAWServer.hs index d7b2f2942b..76a5600590 100644 --- a/saw-remote-api/src/SAWServer.hs +++ b/saw-remote-api/src/SAWServer.hs @@ -112,6 +112,7 @@ data CrucibleSetupVal ty e -- ^ The @'Maybe' 'ServerName'@ value represents a possible MIR -- ADT. This should always be 'Just' with MIR verification and -- 'Nothing' with LLVM or JVM verification. + | EnumValue ServerName String [CrucibleSetupVal ty e] | TupleValue [CrucibleSetupVal ty e] | SliceValue (CrucibleSetupVal ty e) | SliceRangeValue (CrucibleSetupVal ty e) Int Int diff --git a/saw-remote-api/src/SAWServer/Data/SetupValue.hs b/saw-remote-api/src/SAWServer/Data/SetupValue.hs index 13ae0bedbd..04cc3f0a25 100644 --- a/saw-remote-api/src/SAWServer/Data/SetupValue.hs +++ b/saw-remote-api/src/SAWServer/Data/SetupValue.hs @@ -14,6 +14,7 @@ data SetupValTag | TagCryptol | TagArrayValue | TagStructValue + | TagEnumValue | TagTupleValue | TagSliceValue | TagSliceRangeValue @@ -34,6 +35,7 @@ instance FromJSON SetupValTag where "Cryptol" -> pure TagCryptol "array" -> pure TagArrayValue "struct" -> pure TagStructValue + "enum" -> pure TagEnumValue "tuple" -> pure TagTupleValue "slice" -> pure TagSliceValue "slice range" -> pure TagSliceRangeValue @@ -57,6 +59,7 @@ instance (FromJSON ty, FromJSON cryptolExpr) => FromJSON (CrucibleSetupVal ty cr TagCryptol -> CryptolExpr <$> o .: "expression" TagArrayValue -> ArrayValue <$> o .:? "element type" <*> o .: "elements" TagStructValue -> StructValue <$> o .:? "MIR ADT server name" <*> o .: "elements" + TagEnumValue -> EnumValue <$> o .: "MIR ADT server name" <*> o .: "variant name" <*> o .: "elements" TagTupleValue -> TupleValue <$> o .: "elements" TagSliceValue -> SliceValue <$> o .: "base" TagSliceRangeValue -> SliceRangeValue <$> o .: "base" <*> o .: "start" <*> o .: "end" diff --git a/saw-remote-api/src/SAWServer/JVMCrucibleSetup.hs b/saw-remote-api/src/SAWServer/JVMCrucibleSetup.hs index 8262e46c81..e3befb64cd 100644 --- a/saw-remote-api/src/SAWServer/JVMCrucibleSetup.hs +++ b/saw-remote-api/src/SAWServer/JVMCrucibleSetup.hs @@ -190,6 +190,8 @@ compileJVMContract fileReader bic ghostEnv cenv0 c = JVMSetupM $ fail "Array setup values unsupported in JVM API." getSetupVal _ (StructValue _ _) = JVMSetupM $ fail "Struct setup values unsupported in JVM API." + getSetupVal _ (EnumValue _ _ _) = + JVMSetupM $ fail "Enum setup values unsupported in JVM API." getSetupVal _ (TupleValue _) = JVMSetupM $ fail "Tuple setup values unsupported in JVM API." getSetupVal _ (SliceValue _) = diff --git a/saw-remote-api/src/SAWServer/LLVMCrucibleSetup.hs b/saw-remote-api/src/SAWServer/LLVMCrucibleSetup.hs index 6b05fe1d65..c091d0f029 100644 --- a/saw-remote-api/src/SAWServer/LLVMCrucibleSetup.hs +++ b/saw-remote-api/src/SAWServer/LLVMCrucibleSetup.hs @@ -190,6 +190,8 @@ compileLLVMContract fileReader bic ghostEnv cenv0 c = LLVMCrucibleSetupM $ fail "Tuple setup values unsupported in the LLVM API." getSetupVal _ (SliceValue _) = LLVMCrucibleSetupM $ fail "Slice setup values unsupported in the LLVM API." + getSetupVal _ (EnumValue _ _ _) = + LLVMCrucibleSetupM $ fail "Enum setup values unsupported in the LLVM API." getSetupVal _ (SliceRangeValue _ _ _) = LLVMCrucibleSetupM $ fail "Slice range setup values unsupported in the LLVM API." getSetupVal env (FieldLValue base fld) = diff --git a/saw-remote-api/src/SAWServer/MIRCrucibleSetup.hs b/saw-remote-api/src/SAWServer/MIRCrucibleSetup.hs index b6cf3555df..35ce5bb6e4 100644 --- a/saw-remote-api/src/SAWServer/MIRCrucibleSetup.hs +++ b/saw-remote-api/src/SAWServer/MIRCrucibleSetup.hs @@ -19,6 +19,7 @@ import Data.Map (Map) import qualified Data.Map as Map import Mir.Intrinsics (MIR) +import qualified Mir.Mir as Mir import qualified Cryptol.Parser.AST as P import Cryptol.Utils.Ident (mkIdent) @@ -30,6 +31,7 @@ import SAWScript.Crucible.MIR.Builtins mir_alloc_mut, mir_fresh_expanded_value, mir_fresh_var, + mir_enum_value, mir_execute_func, mir_ghost_value, mir_load_module, @@ -194,14 +196,14 @@ compileMIRContract fileReader bic ghostEnv cenv0 sawenv c = return $ MS.SetupArray ty' (elt':eltss') getSetupVal _ (StructValue Nothing _) = MIRSetupM $ fail "MIR struct without a corresponding ADT." - getSetupVal env (StructValue (Just adtServerName) elts) = - -- First, we look up the MIR ADT from its ServerName. If we find it, - -- proceed to handle the struct field types. Otherwise, raise an error. - case getMIRAdtEither sawenv adtServerName of - Left ex -> throw ex - Right adt -> do - elts' <- mapM (getSetupVal env) elts - pure $ MS.SetupStruct adt elts' + getSetupVal env (StructValue (Just adtServerName) elts) = do + adt <- getMirAdt adtServerName + elts' <- mapM (getSetupVal env) elts + pure $ MS.SetupStruct adt elts' + getSetupVal env (EnumValue adtServerName variantName elts) = do + adt <- getMirAdt adtServerName + elts' <- mapM (getSetupVal env) elts + MIRSetupM $ mir_enum_value adt variantName elts' getSetupVal env (TupleValue elems) = do elems' <- mapM (getSetupVal env) elems pure $ MS.SetupTuple () elems' @@ -227,6 +229,10 @@ compileMIRContract fileReader bic ghostEnv cenv0 sawenv c = getSetupVal _ (ElementLValue _ _) = MIRSetupM $ fail "Element l-values unsupported in the MIR API." + getMirAdt :: ServerName -> MIRSetupM Mir.Adt + getMirAdt adtServerName = + either throw pure $ getMIRAdtEither sawenv adtServerName + data MIRLoadModuleParams = MIRLoadModuleParams ServerName FilePath diff --git a/saw-script.cabal b/saw-script.cabal index 2b52c55716..7804376543 100644 --- a/saw-script.cabal +++ b/saw-script.cabal @@ -54,6 +54,7 @@ library , haskeline , heapster-saw , hobbits >= 1.3.1 + , indexed-traversable , galois-dwarf >= 0.2.2 , IfElse , jvm-parser diff --git a/src/SAWScript/Crucible/Common/MethodSpec.hs b/src/SAWScript/Crucible/Common/MethodSpec.hs index acba975084..6884eaf8d4 100644 --- a/src/SAWScript/Crucible/Common/MethodSpec.hs +++ b/src/SAWScript/Crucible/Common/MethodSpec.hs @@ -149,7 +149,8 @@ import SAWScript.Crucible.Common (Sym, sawCoreState) import SAWScript.Crucible.Common.Setup.Value import SAWScript.Crucible.LLVM.Setup.Value (LLVM) import SAWScript.Crucible.JVM.Setup.Value () -import SAWScript.Crucible.MIR.Setup.Value (MirSetupSlice(..)) +import SAWScript.Crucible.MIR.Setup.Value + (MirSetupEnum(..), MirSetupSlice(..)) import SAWScript.Options import SAWScript.Prover.SolverStats import SAWScript.Utils (bullets) @@ -203,6 +204,14 @@ ppSetupValue setupval = case setupval of absurd empty (MIRExt, _defId) -> ppSetupStructDefault vs + SetupEnum x -> + case (ext, x) of + (LLVMExt, empty) -> + absurd empty + (JVMExt, empty) -> + absurd empty + (MIRExt, enum_) -> + ppMirSetupEnum enum_ SetupTuple x vs -> case (ext, x) of (LLVMExt, empty) -> @@ -249,12 +258,18 @@ ppSetupValue setupval = case setupval of | packed = PP.angles (ppSetupStructDefault vs) | otherwise = ppSetupStructDefault vs - ppSetupStructDefault :: [SetupValue ext] -> PP.Doc ann + ppSetupStructDefault :: forall ext'. IsExt ext' => [SetupValue ext'] -> PP.Doc ann ppSetupStructDefault vs = PP.braces (commaList (map ppSetupValue vs)) ppSetupTuple :: [SetupValue MIR] -> PP.Doc ann ppSetupTuple vs = PP.parens (commaList (map ppSetupValue vs)) + ppMirSetupEnum :: MirSetupEnum -> PP.Doc ann + ppMirSetupEnum (MirSetupEnumVariant _defId variantName _varIdx fields) = + PP.pretty variantName PP.<+> ppSetupStructDefault fields + ppMirSetupEnum (MirSetupEnumSymbolic _defId _discr _variants) = + PP.pretty "" + ppMirSetupSlice :: MirSetupSlice -> PP.Doc ann ppMirSetupSlice (MirSetupSliceRaw ref len) = PP.pretty "SliceRaw" <> ppSetupTuple [ref, len] diff --git a/src/SAWScript/Crucible/Common/Setup/Value.hs b/src/SAWScript/Crucible/Common/Setup/Value.hs index b9fa6ebcde..1b1153104e 100644 --- a/src/SAWScript/Crucible/Common/Setup/Value.hs +++ b/src/SAWScript/Crucible/Common/Setup/Value.hs @@ -38,6 +38,7 @@ module SAWScript.Crucible.Common.Setup.Value , XSetupNull , XSetupStruct + , XSetupEnum , XSetupTuple , XSetupSlice , XSetupArray @@ -121,6 +122,7 @@ type family ResolvedState ext :: Type type family XSetupNull ext type family XSetupStruct ext +type family XSetupEnum ext type family XSetupTuple ext type family XSetupSlice ext type family XSetupArray ext @@ -151,6 +153,9 @@ data SetupValue ext where -- | A slice value. At the moment, this is only ever used for MIR -- verification. SetupSlice :: XSetupSlice ext -> SetupValue ext + -- | An enumeration value. At the moment, this is only ever used for MIR + -- verification. + SetupEnum :: XSetupEnum ext -> SetupValue ext -- | A pointer to a global variable SetupGlobal :: XSetupGlobal ext -> String -> SetupValue ext @@ -166,6 +171,7 @@ data SetupValue ext where type SetupValueHas (c :: Type -> Constraint) ext = ( c (XSetupNull ext) , c (XSetupStruct ext) + , c (XSetupEnum ext) , c (XSetupTuple ext) , c (XSetupSlice ext) , c (XSetupArray ext) diff --git a/src/SAWScript/Crucible/JVM/Override.hs b/src/SAWScript/Crucible/JVM/Override.hs index 1bf1777e67..4ab53ab60f 100644 --- a/src/SAWScript/Crucible/JVM/Override.hs +++ b/src/SAWScript/Crucible/JVM/Override.hs @@ -552,6 +552,7 @@ matchArg opts sc cc cs prepost md actual@(RVal ref) expectedTy setupval = addAssert p md (Crucible.SimError (cs ^. MS.csLoc) (Crucible.AssertFailureSimError ("null-equality " ++ MS.stateCond prepost) "")) MS.SetupGlobal empty _ -> absurd empty + MS.SetupEnum empty -> absurd empty MS.SetupTuple empty _ -> absurd empty MS.SetupSlice empty -> absurd empty @@ -932,6 +933,7 @@ instantiateSetupValue sc s v = MS.SetupNull () -> return v MS.SetupGlobal empty _ -> absurd empty MS.SetupStruct empty _ -> absurd empty + MS.SetupEnum empty -> absurd empty MS.SetupTuple empty _ -> absurd empty MS.SetupSlice empty -> absurd empty MS.SetupArray empty _ -> absurd empty diff --git a/src/SAWScript/Crucible/JVM/ResolveSetupValue.hs b/src/SAWScript/Crucible/JVM/ResolveSetupValue.hs index 9364b7716c..98f38a0d14 100644 --- a/src/SAWScript/Crucible/JVM/ResolveSetupValue.hs +++ b/src/SAWScript/Crucible/JVM/ResolveSetupValue.hs @@ -140,6 +140,7 @@ typeOfSetupValue _cc env _nameEnv val = return (J.ClassType (J.mkClassName "java/lang/Object")) MS.SetupGlobal empty _ -> absurd empty MS.SetupStruct empty _ -> absurd empty + MS.SetupEnum empty -> absurd empty MS.SetupTuple empty _ -> absurd empty MS.SetupSlice empty -> absurd empty MS.SetupArray empty _ -> absurd empty @@ -173,6 +174,7 @@ resolveSetupVal cc env _tyenv _nameEnv val = return (RVal (W4.maybePartExpr sym Nothing)) MS.SetupGlobal empty _ -> absurd empty MS.SetupStruct empty _ -> absurd empty + MS.SetupEnum empty -> absurd empty MS.SetupTuple empty _ -> absurd empty MS.SetupSlice empty -> absurd empty MS.SetupArray empty _ -> absurd empty diff --git a/src/SAWScript/Crucible/JVM/Setup/Value.hs b/src/SAWScript/Crucible/JVM/Setup/Value.hs index a69e29ec05..9bd3ec97f3 100644 --- a/src/SAWScript/Crucible/JVM/Setup/Value.hs +++ b/src/SAWScript/Crucible/JVM/Setup/Value.hs @@ -78,6 +78,7 @@ import qualified SAWScript.Crucible.Common.Setup.Value as MS type instance MS.XSetupNull CJ.JVM = () type instance MS.XSetupGlobal CJ.JVM = Void type instance MS.XSetupStruct CJ.JVM = Void +type instance MS.XSetupEnum CJ.JVM = Void type instance MS.XSetupTuple CJ.JVM = Void type instance MS.XSetupSlice CJ.JVM = Void type instance MS.XSetupArray CJ.JVM = Void diff --git a/src/SAWScript/Crucible/LLVM/Override.hs b/src/SAWScript/Crucible/LLVM/Override.hs index 1a0d1ed882..7611823f0f 100644 --- a/src/SAWScript/Crucible/LLVM/Override.hs +++ b/src/SAWScript/Crucible/LLVM/Override.hs @@ -1009,6 +1009,7 @@ matchPointsTos opts sc cc spec prepost = go False [] case v of SetupVar i -> Set.singleton i SetupStruct _ xs -> foldMap setupVars xs + SetupEnum empty -> absurd empty SetupTuple empty _ -> absurd empty SetupSlice empty -> absurd empty SetupArray _ xs -> foldMap setupVars xs @@ -1169,6 +1170,8 @@ matchArg opts sc cc cs prepost md actual expectedTy expected = (V.toList (Crucible.fiType <$> Crucible.siFields fields)) zs ] + (_, _, SetupEnum empty) -> + absurd empty (_, _, SetupTuple empty _) -> absurd empty (_, _, SetupSlice empty) -> @@ -2266,6 +2269,7 @@ instantiateSetupValue sc s v = SetupNull{} -> return v SetupGlobal{} -> return v SetupGlobalInitializer{} -> return v + SetupEnum empty -> absurd empty SetupTuple empty _ -> absurd empty SetupSlice empty -> absurd empty where diff --git a/src/SAWScript/Crucible/LLVM/ResolveSetupValue.hs b/src/SAWScript/Crucible/LLVM/ResolveSetupValue.hs index 84b29b9784..b5fd1bdbf6 100644 --- a/src/SAWScript/Crucible/LLVM/ResolveSetupValue.hs +++ b/src/SAWScript/Crucible/LLVM/ResolveSetupValue.hs @@ -451,6 +451,8 @@ typeOfSetupValue cc env nameEnv val = let si = Crucible.mkStructInfo dl packed memTys return (Crucible.StructType si) + SetupEnum empty -> + absurd empty SetupTuple empty _ -> absurd empty SetupSlice empty -> @@ -632,6 +634,8 @@ resolveSetupVal cc mem env tyenv nameEnv val = Crucible.Struct v -> v _ -> error "impossible" return $ Crucible.LLVMValStruct (V.zip flds (V.fromList vals)) + SetupEnum empty -> + absurd empty SetupTuple empty _ -> absurd empty SetupSlice empty -> diff --git a/src/SAWScript/Crucible/LLVM/Setup/Value.hs b/src/SAWScript/Crucible/LLVM/Setup/Value.hs index 9f301187f7..2f9133e03f 100644 --- a/src/SAWScript/Crucible/LLVM/Setup/Value.hs +++ b/src/SAWScript/Crucible/LLVM/Setup/Value.hs @@ -120,6 +120,7 @@ data LLVM (arch :: CL.LLVMArch) type instance Setup.XSetupNull (LLVM _) = () -- 'True' if this is an LLVM packed struct, 'False' otherwise. type instance Setup.XSetupStruct (LLVM _) = Bool +type instance Setup.XSetupEnum (LLVM _) = Void type instance Setup.XSetupTuple (LLVM _) = Void type instance Setup.XSetupSlice (LLVM _) = Void type instance Setup.XSetupArray (LLVM _) = () diff --git a/src/SAWScript/Crucible/MIR/Builtins.hs b/src/SAWScript/Crucible/MIR/Builtins.hs index c81a39546d..27ef33fa7c 100644 --- a/src/SAWScript/Crucible/MIR/Builtins.hs +++ b/src/SAWScript/Crucible/MIR/Builtins.hs @@ -26,6 +26,8 @@ module SAWScript.Crucible.MIR.Builtins , mir_return , mir_unsafe_assume_spec , mir_verify + -- ** MIR enums + , mir_enum_value -- ** MIR slices , mir_slice_value , mir_slice_range_value @@ -56,7 +58,7 @@ module SAWScript.Crucible.MIR.Builtins ) where import Control.Lens -import Control.Monad (foldM, forM, forM_, unless, when) +import Control.Monad (foldM, forM, forM_, unless, when, zipWithM) import qualified Control.Monad.Catch as X import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.Reader (runReaderT) @@ -64,8 +66,9 @@ import Control.Monad.State (MonadState(..), StateT(..), execStateT, gets) import Control.Monad.Trans.Class (MonadTrans(..)) import qualified Data.ByteString.Lazy as BSL import Data.Foldable (for_) +import qualified Data.Foldable.WithIndex as FWI import Data.IORef -import qualified Data.List as List (find) +import qualified Data.List.Extra as List (find, unsnoc) import qualified Data.List.NonEmpty as NE import Data.List.NonEmpty (NonEmpty(..)) import qualified Data.Map as Map @@ -75,6 +78,7 @@ import qualified Data.Parameterized.Context as Ctx import qualified Data.Parameterized.Map as MapF import Data.Parameterized.NatRepr (knownNat, natValue) import Data.Parameterized.Some (Some(..)) +import qualified Data.Parameterized.TraversableFC as FC import qualified Data.Parameterized.TraversableFC.WithIndex as FCI import qualified Data.Set as Set import qualified Data.Text as Text @@ -288,13 +292,9 @@ constructExpandedSetupValue cc sc = go case shp of UnitShape _ -> pure $ MS.SetupTuple () [] - PrimShape ty _ -> - case cryptolTypeOfActual ty of - Nothing -> - X.throwM $ MIRFreshExpandedValueUnsupportedType ty - Just cty -> do - fv <- Setup.freshVariable sc pfx cty - pure $ MS.SetupTerm fv + PrimShape ty _ -> do + fv <- freshPrimVariable pfx ty + pure $ MS.SetupTerm fv TupleShape _ _ fldShps -> do flds <- goFlds pfx fldShps pure $ MS.SetupTuple () flds @@ -303,7 +303,7 @@ constructExpandedSetupValue cc sc = go Mir.TyArray _ n -> do elems <- traverse - (\i -> go (pfx <> "." <> Text.pack (show i)) elemShp) + (\i -> go (pfx <> "_" <> Text.pack (show i)) elemShp) [0..n-1] pure $ MS.SetupArray elemTy elems _ -> @@ -329,17 +329,45 @@ constructExpandedSetupValue cc sc = go adt_not_found_panic "StructShape" adtName _ -> non_adt_type_panic "StructShape" ty + EnumShape ty _ variantShps _ discrShp -> + case ty of + Mir.TyAdt adtName _ _ -> + case col ^. Mir.adts . at adtName of + Just adt@(Mir.Adt _ kind _ _ _ _ _) -> + case kind of + Mir.Enum _ -> + MS.SetupEnum <$> goEnum pfx adt discrShp variantShps + Mir.Struct -> + panic "constructExpandedSetupValue" + ["Expected enum, encountered struct"] + Mir.Union -> + panic "constructExpandedSetupValue" + ["Expected enum, encountered union"] + Nothing -> + adt_not_found_panic "EnumShape" adtName + _ -> + non_adt_type_panic "EnumShape" ty TransparentShape ty shp' -> case ty of Mir.TyAdt adtName _ _ -> do case col ^. Mir.adts . at adtName of - Just adt@(Mir.Adt _ kind _ _ _ _ _) -> + Just adt@(Mir.Adt adtNm kind variants _ _ _ _) -> case kind of Mir.Struct -> do val <- go pfx shp' pure $ MS.SetupStruct adt [val] - Mir.Enum{} -> - fail "`repr(transparent)` enums not currently supported" + Mir.Enum{} + | [variant] <- variants + -> do val <- go pfx shp' + pure $ MS.SetupEnum + $ MirSetupEnumVariant adt variant 0 [val] + + | otherwise + -> panic "constructExpandedSetupValue" + [ "`repr(transparent)` enum that doesn't have exactly one variant" + , "Enum: " ++ show adtNm + , "Number of variants: " ++ show (length variants) + ] Mir.Union -> panic "constructExpandedSetupValue" [ "Unexpected `repr(transparent)` union:" @@ -356,6 +384,64 @@ constructExpandedSetupValue cc sc = go FnPtrShape ty _ _ -> X.throwM $ MIRFreshExpandedValueUnsupportedType ty + -- Create a fresh symbolic enum value, as described in + -- Note [Symboliic enums] in SAWScript.Crucible.MIR.Setup.Value. + goEnum :: + forall discrShp variantCtx. + Text -> + Mir.Adt -> + TypeShape discrShp -> + Ctx.Assignment VariantShape variantCtx -> + CrucibleSetup MIR MirSetupEnum + goEnum pfx adt@(Mir.Adt _ _ variants _ _ _ _) discrShp variantShps = + mccWithBackend cc $ \bak -> + do -- First, create a symbolic discriminant value. + IsBVShape discrTy discrW <- pure $ testDiscriminantIsBV discrShp + let discrPfx = pfx <> "_discr" + discrVar <- freshPrimVariable discrPfx discrTy + let discrVal = MS.SetupTerm discrVar + + -- Next, add Crucible assumptions that constraint the discriminant + -- to be equal to one of the possible variants' discriminant values. + -- This assumption will be of the form: + -- + -- (discr == 0) \/ (discr == 1) \/ ... + discrWNat <- liftIO $ scNat sc $ natValue discrW + possibleDiscrTerms <- liftIO $ + traverse (\discr -> do + discrNat <- scNat sc $ fromInteger discr + scBvNat sc discrWNat discrNat) + (map getEnumVariantDiscr variants) + scFalse <- liftIO $ scBool sc False + possibleDiscrPredTerm <- liftIO $ + foldM + (\z possibleDiscrTerm -> do + p <- scBvEq sc discrWNat (ttTerm discrVar) possibleDiscrTerm + scOr sc p z) + scFalse + possibleDiscrTerms + possibleDiscrPred <- liftIO $ resolveSAWPred cc possibleDiscrPredTerm + loc <- SS.toW4Loc "mir_fresh_expanded_value" <$> lift (lift getPosition) + liftIO $ Crucible.addAssumption bak $ + Crucible.GenericAssumption + loc "Symbolic enum discriminant constraints" possibleDiscrPred + + -- Finally, create symbolic fields for each of the possible variants. + let variantAssns :: [Some (Ctx.Assignment FieldShape)] + variantAssns = + FC.toListFC + (\(VariantShape fldShps) -> Some fldShps) + variantShps + variantVals <- + zipWithM + (\variant (Some fldShps) -> + let variantPfx = pfx <> "_" <> getEnumVariantShortName variant in + goFlds variantPfx fldShps) + variants + variantAssns + + pure $ MirSetupEnumSymbolic adt discrVal variantVals + goFlds :: forall ctx. Text -> Ctx.Assignment FieldShape ctx -> @@ -363,12 +449,25 @@ constructExpandedSetupValue cc sc = go goFlds pfx fldShps = sequenceA $ FCI.itoListFC (\idx fldShp -> - let pfx' = pfx <> "." <> Text.pack (show idx) in + let pfx' = pfx <> "_" <> Text.pack (show idx) in case fldShp of ReqField shp' -> go pfx' shp' OptField shp' -> go pfx' shp') fldShps + -- Create a fresh variable of a primitive MIR type (where \"primitive\" + -- is defined by the @cryptolTypeOfActual@ function). + freshPrimVariable :: + Text -> + Mir.Ty -> + CrucibleSetup MIR TypedTerm + freshPrimVariable pfx ty = + case cryptolTypeOfActual ty of + Nothing -> + X.throwM $ MIRFreshExpandedValueUnsupportedType ty + Just cty -> + Setup.freshVariable sc pfx cty + adt_not_found_panic :: String -> Mir.DefId -> a adt_not_found_panic shapeName adtName = panic "constructExpandedSetupValue" @@ -595,6 +694,45 @@ mir_verify rm nm lemmas checkSat setup tactic = ps <- io (MS.mkProvedSpec MS.SpecProved methodSpec stats vcstats lemmaSet diff) returnProof ps +----- +-- MIR enums +----- + +-- | Construct a specific enum variant. This does a light amount of validity +-- checking, which is the only reason that this function is monadic. +mir_enum_value :: + X.MonadThrow m => + Mir.Adt -> + String -> + [MS.SetupValue MIR] -> + m (MS.SetupValue MIR) +mir_enum_value adt variantNm vs = + case adt of + Mir.Adt adtNm (Mir.Enum _) variants _ _ _ _ -> do + (variantIdx, variant) <- + case FWI.ifind (\_ v -> variantDefIdMatches v) variants of + Just iv -> + pure iv + Nothing -> + X.throwM $ MIREnumValueVariantNotFound adtNm variantNm + pure $ MS.SetupEnum $ MirSetupEnumVariant adt variant variantIdx vs + Mir.Adt adtNm Mir.Struct _ _ _ _ _ -> + X.throwM $ MIREnumValueNonEnum adtNm "struct" + Mir.Adt adtNm Mir.Union _ _ _ _ _ -> + X.throwM $ MIREnumValueNonEnum adtNm "union" + where + variantNmText :: Text + variantNmText = Text.pack variantNm + + -- Check if the user-supplied String argument matches the name of the given + -- variant's DefId. For instance, the variant DefId might be named + -- @core::option[0]::Option[0]::Some[0]@, but the user will simply write + -- @Some@, so we must strip off the other parts of the DefId before checking + -- if the two are the same. + variantDefIdMatches :: Mir.Variant -> Bool + variantDefIdMatches variant = + getEnumVariantShortName variant == variantNmText + ----- -- MIR slices ----- @@ -1161,6 +1299,20 @@ findFn rm nm = do Just x -> return x Nothing -> fail $ "Couldn't find MIR function named: " ++ nm +-- | Given a full enum variant identifier (e.g., +-- @core::option[0]::Option[0]::Some[0]@, retrieve the part of the identifier +-- that corresponds to the variant's shorthand name (e.g., @Some@). +getEnumVariantShortName :: Mir.Variant -> Text +getEnumVariantShortName variant + | Just (_, (variantNm, _)) <- List.unsnoc (variant ^. Mir.vname . Mir.didPath) + = variantNm + + | otherwise + = panic "getEnumVariantShortName" + [ "Malformed enum variant identifier" + , show $ variant ^. Mir.vname + ] + getMIRCrucibleContext :: CrucibleSetup MIR MIRCrucibleContext getMIRCrucibleContext = view Setup.csCrucibleContext <$> get @@ -1383,6 +1535,8 @@ data MIRSetupError | MIRArgNumberWrong Int Int -- number expected, number found | MIRReturnUnexpected Mir.Ty -- found | MIRReturnTypeMismatch Mir.Ty Mir.Ty -- expected, found + | MIREnumValueVariantNotFound Mir.DefId String + | MIREnumValueNonEnum Mir.DefId String -- The String is either \"struct\" or \"union\" instance X.Exception MIRSetupError where toException = topLevelExceptionToException @@ -1420,3 +1574,13 @@ instance Show MIRSetupError where , "Expected type: " ++ show (PP.pretty expected) , "Given type: " ++ show (PP.pretty found) ] + MIREnumValueVariantNotFound adtNm variantNm -> + unlines + [ "mir_enum_value: Could not find a variant named `" ++ variantNm ++ "`" + , "in the enum " ++ show adtNm + ] + MIREnumValueNonEnum adtNm what -> + unlines + [ "mir_enum_value: Expected enum, received " ++ what + , show adtNm + ] diff --git a/src/SAWScript/Crucible/MIR/MethodSpecIR.hs b/src/SAWScript/Crucible/MIR/MethodSpecIR.hs index c52292ea43..a05c2d6ebc 100644 --- a/src/SAWScript/Crucible/MIR/MethodSpecIR.hs +++ b/src/SAWScript/Crucible/MIR/MethodSpecIR.hs @@ -48,6 +48,9 @@ module SAWScript.Crucible.MIR.MethodSpecIR -- * @MIRMethodSpec@ , MIRMethodSpec + -- * @MirSetupEnum@ + , MirSetupEnum(..) + -- * @MirSetupSlice@ , MirSetupSlice(..) diff --git a/src/SAWScript/Crucible/MIR/Override.hs b/src/SAWScript/Crucible/MIR/Override.hs index 666fcec74c..1dd4af3cb7 100644 --- a/src/SAWScript/Crucible/MIR/Override.hs +++ b/src/SAWScript/Crucible/MIR/Override.hs @@ -7,6 +7,7 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TupleSections #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeOperators #-} @@ -67,6 +68,7 @@ import qualified Mir.TransTy as Mir import qualified What4.Expr as W4 import qualified What4.Interface as W4 import qualified What4.LabeledPred as W4 +import qualified What4.Partial as W4 import qualified What4.ProgramLoc as W4 import Verifier.SAW.SharedTerm @@ -892,6 +894,7 @@ instantiateSetupValue sc s v = MS.SetupTerm tt -> MS.SetupTerm <$> doTerm tt MS.SetupArray elemTy vs -> MS.SetupArray elemTy <$> mapM (instantiateSetupValue sc s) vs MS.SetupStruct did vs -> MS.SetupStruct did <$> mapM (instantiateSetupValue sc s) vs + MS.SetupEnum enum_ -> MS.SetupEnum <$> instantiateSetupEnum enum_ MS.SetupTuple x vs -> MS.SetupTuple x <$> mapM (instantiateSetupValue sc s) vs MS.SetupSlice slice -> MS.SetupSlice <$> instantiateSetupSlice slice MS.SetupNull empty -> absurd empty @@ -904,6 +907,14 @@ instantiateSetupValue sc s v = where doTerm (TypedTerm schema t) = TypedTerm schema <$> scInstantiateExt sc s t + instantiateSetupEnum :: MirSetupEnum -> IO MirSetupEnum + instantiateSetupEnum (MirSetupEnumVariant adt variant variantIdx vs) = + MirSetupEnumVariant adt variant variantIdx <$> + mapM (instantiateSetupValue sc s) vs + instantiateSetupEnum (MirSetupEnumSymbolic adt discr variants) = + MirSetupEnumSymbolic adt discr <$> + mapM (mapM (instantiateSetupValue sc s)) variants + instantiateSetupSlice :: MirSetupSlice -> IO MirSetupSlice instantiateSetupSlice (MirSetupSliceRaw ref len) = MirSetupSliceRaw @@ -1023,6 +1034,7 @@ learnSetupCondition opts sc cc spec prepost cond = -- | Match the value of a function argument with a symbolic 'SetupValue'. matchArg :: + forall w. Options {- ^ saw script print out opts -} -> SharedContext {- ^ context for constructing SAW terms -} -> MIRCrucibleContext {- ^ context for interacting with Crucible -} -> @@ -1073,40 +1085,104 @@ matchArg opts sc cc cs prepost md actual expectedTy expected = (MIRVal (StructShape _ _ xsFldShps) (Crucible.AnyValue tpr@(Crucible.StructRepr _) xs), Mir.TyAdt _ _ _, MS.SetupStruct adt zs) - | Ctx.sizeInt (Ctx.size xs) == length zs - , let xsTpr = Crucible.StructRepr (FC.fmapFC fieldShapeType xsFldShps) - , Just Refl <- W4.testEquality tpr xsTpr -> - case adt of - Mir.Adt _ Mir.Struct [v] _ _ _ _ -> - let ys = v ^.. Mir.vfields . each . Mir.fty in - sequence_ - [ case xFldShp of - ReqField shp -> - matchArg opts sc cc cs prepost md (MIRVal shp x) y z - OptField shp -> do - let x' = readMaybeType sym "field" (shapeType shp) x - matchArg opts sc cc cs prepost md (MIRVal shp x') y z - | (Some (Functor.Pair xFldShp (Crucible.RV x)), y, z) <- - zip3 (FC.toListFC Some (Ctx.zipWith Functor.Pair xsFldShps xs)) - ys - zs ] - Mir.Adt _ ak _ _ _ _ _ -> - panic "matchArg" ["AdtKind " ++ show ak ++ " not yet implemented"] + | let xsTpr = Crucible.StructRepr (FC.fmapFC fieldShapeType xsFldShps) + , Just Refl <- W4.testEquality tpr xsTpr -> do + let variants = adt ^. Mir.adtvariants + variant <- + case variants of + [variant] -> + pure variant + _ -> + panic "matchArg" + [ "Encountered struct Adt with " ++ + show (length variants) ++ + " variants:" + , show $ adt ^. Mir.adtname + ] + let ys = variant ^.. Mir.vfields . each . Mir.fty + matchFields sym xsFldShps xs ys zs + + -- In order to match an enum value, we first check to see if the expected + -- value is a specific enum variant or a symbolic enum... + (MIRVal (EnumShape _ _ variantShps _ discrShp) + (Crucible.AnyValue + (Mir.RustEnumRepr discrTpr variantCtx) + (Ctx.Empty + Ctx.:> Crucible.RV actualDiscr + Ctx.:> Crucible.RV variantAssn)), + _, + MS.SetupEnum enum_) + | Just Refl <- W4.testEquality (shapeType discrShp) discrTpr + , Just Refl <- W4.testEquality (FC.fmapFC variantShapeType variantShps) variantCtx -> + case enum_ of + -- ...if the expected value is a specific enum variant, then we must: + -- + -- - Ensure that the discriminant values match + -- - Ensure that the predicate in the variant's VariantBranch holds. + -- - Match the fields of the VariantBranch's payload point-wise + MirSetupEnumVariant adt variant variantIdxInt zs -> do + Some variantIdx <- pure $ + variantIntIndex (adt ^. Mir.adtname) variantIdxInt (Ctx.size variantAssn) + VariantShape xsFldShps <- pure $ variantShps Ctx.! variantIdx + let Crucible.VB expectedVariant = variantAssn Ctx.! variantIdx + let ys = variant ^.. Mir.vfields . each . Mir.fty + + -- Ensure that the discriminant values match. + IsBVShape _ discrW <- pure $ testDiscriminantIsBV discrShp + let discr = getEnumVariantDiscr variant + expectedDiscr <- liftIO $ + W4.bvLit sym discrW $ BV.mkBV discrW discr + discrEq <- liftIO $ + W4.bvEq sym expectedDiscr actualDiscr + addAssert discrEq md =<< notEq + + case expectedVariant of + W4.PE xsPred xs -> do + -- Ensure that the variant is defined, i.e., that the predicate + -- in the underlying PartialExpr holds. Due to the way that we + -- construct specific enum values, this should always hold if + -- the discriminant values match, but we check it anyway to be + -- on the safe side. + addAssert xsPred md =<< notEq + -- Finally, ensure that the fields match point-wise. + matchFields sym xsFldShps xs ys zs + W4.Unassigned -> + pure () + + -- ...if the expected value is a symbolic enum, then things are a bit + -- more involved. See Note [Symbolic enums] in + -- SAWScript.Crucible.MIR.Setup.Value for the full story, but the + -- abridged version is that we must: + -- + -- - Ensure that the discriminant values match + -- - For each possible variant, match the fields of the + -- VariantBranch's payload point-wise under the assumption that + -- the VariantBranch's predicate holds. + MirSetupEnumSymbolic adt expectedDiscr variantFlds -> do + -- Ensure that the discriminant values match. + let discrTp = shapeMirTy discrShp + matchArg opts sc cc cs prepost md (MIRVal discrShp actualDiscr) discrTp expectedDiscr + + sequence_ @_ @_ @() + [ case xPE of + W4.PE xsPred xs -> + -- For each variant, check that the fields of the variant + -- (xs) match point-wise under the assumption that the + -- VariantBranch's predicate (xsPred) holds. + withConditionalPred xsPred $ + matchFields sym xsFldShps xs ys zs + W4.Unassigned -> + pure () + | (Some (Functor.Pair (VariantShape xsFldShps) (Crucible.VB xPE)), ys, zs) <- + zip3 + (FC.toListFC Some (Ctx.zipWith Functor.Pair variantShps variantAssn)) + (map (\v -> v ^.. Mir.vfields . each . Mir.fty) (adt ^. Mir.adtvariants)) + variantFlds + ] -- match the fields of a tuple point-wise (MIRVal (TupleShape _ _ xsFldShps) xs, Mir.TyTuple ys, MS.SetupTuple () zs) -> - sequence_ - [ case xFldShp of - ReqField shp -> - matchArg opts sc cc cs prepost md (MIRVal shp x) y z - OptField shp -> do - let x' = readMaybeType sym "field" (shapeType shp) x - matchArg opts sc cc cs prepost md (MIRVal shp x') y z - | (Some (Functor.Pair xFldShp (Crucible.RV x)), y, z) <- - zip3 (FC.toListFC Some (Ctx.zipWith Functor.Pair xsFldShps xs)) - ys - zs - ] + matchFields sym xsFldShps xs ys zs -- Match the parts of a slice point-wise (MIRVal (SliceShape _ actualElemTy actualMutbl actualElemTpr) @@ -1182,8 +1258,36 @@ matchArg opts sc cc cs prepost md actual expectedTy expected = nameEnv = MS.csTypeNames cs loc = MS.conditionLoc md + + fail_ :: OverrideMatcher MIR w a fail_ = failure loc =<< mkStructuralMismatch opts cc sc cs actual expected expectedTy + + -- Match the fields (point-wise) in a tuple, a struct, or enum variant. + matchFields :: + Sym -> + Ctx.Assignment FieldShape ctx -> + Ctx.Assignment (Crucible.RegValue' Sym) ctx -> + [Mir.Ty] -> + [SetupValue] -> + OverrideMatcher MIR w () + matchFields sym xsFldShps xs ys zs = do + -- As a sanity check, first ensure that the number of fields matches + -- what is expected. + unless (Ctx.sizeInt (Ctx.size xs) == length zs) fail_ + -- Then match the fields point-wise. + sequence_ + [ case xFldShp of + ReqField shp -> + matchArg opts sc cc cs prepost md (MIRVal shp x) y z + OptField shp -> do + let x' = readMaybeType sym "field" (shapeType shp) x + matchArg opts sc cc cs prepost md (MIRVal shp x') y z + | (Some (Functor.Pair xFldShp (Crucible.RV x)), y, z) <- + zip3 (FC.toListFC Some (Ctx.zipWith Functor.Pair xsFldShps xs)) + ys + zs ] + notEq = notEqual prepost opts loc cc sc cs expected actual -- | For each points-to statement read the memory value through the @@ -1240,6 +1344,7 @@ matchPointsTos opts sc cc spec prepost = go False [] case v of MS.SetupVar i -> Set.singleton i MS.SetupStruct _ xs -> foldMap setupVars xs + MS.SetupEnum enum_ -> setupEnum enum_ MS.SetupTuple _ xs -> foldMap setupVars xs MS.SetupSlice slice -> setupSlice slice MS.SetupArray _ xs -> foldMap setupVars xs @@ -1252,6 +1357,13 @@ matchPointsTos opts sc cc spec prepost = go False [] MS.SetupUnion empty _ _ -> absurd empty MS.SetupNull empty -> absurd empty + -- Compute the set of variable identifiers in a 'MirSetupEnum' + setupEnum :: MirSetupEnum -> Set AllocIndex + setupEnum (MirSetupEnumVariant _ _ _ xs) = + foldMap setupVars xs + setupEnum (MirSetupEnumSymbolic _ _ variants) = + foldMap (foldMap setupVars) variants + -- Compute the set of variable identifiers in a 'MirSetupSlice' setupSlice :: MirSetupSlice -> Set AllocIndex setupSlice (MirSetupSliceRaw ref len) = diff --git a/src/SAWScript/Crucible/MIR/ResolveSetupValue.hs b/src/SAWScript/Crucible/MIR/ResolveSetupValue.hs index 4727199da3..e9f8df5f2e 100644 --- a/src/SAWScript/Crucible/MIR/ResolveSetupValue.hs +++ b/src/SAWScript/Crucible/MIR/ResolveSetupValue.hs @@ -29,10 +29,16 @@ module SAWScript.Crucible.MIR.ResolveSetupValue , mirAdtToTy , findDefId , findDefIdEither + -- * Static items , findStatic , findStaticInitializer , findStaticVar , staticRefMux + -- * Enum discriminants + , getEnumVariantDiscr + , testDiscriminantIsBV + , variantIntIndex + -- * Types of errors , MIRTypeOfError(..) ) where @@ -45,6 +51,7 @@ import qualified Data.BitVector.Sized as BV import qualified Data.Foldable as F import qualified Data.Functor.Product as Functor import Data.Kind (Type) +import qualified Data.List.Extra as List (firstJust) import Data.List.NonEmpty (NonEmpty(..)) import Data.Map (Map) import qualified Data.Map as Map @@ -67,8 +74,10 @@ import qualified Cryptol.TypeCheck.AST as Cryptol (Type, Schema(..)) import qualified Cryptol.Utils.PP as Cryptol (pp) import Lang.Crucible.Backend (IsSymInterface) import Lang.Crucible.Simulator - ( AnyValue(..), GlobalVar(..), RegValue, RegValue'(..), SymGlobalState ) -import Lang.Crucible.Types (MaybeType, TypeRepr(..)) + ( AnyValue(..), GlobalVar(..), RegValue, RegValue'(..), SymGlobalState + , VariantBranch(..), injectVariant + ) +import Lang.Crucible.Types (AnyType, MaybeType, TypeRepr(..)) import qualified Mir.DefId as Mir import qualified Mir.FancyMuxTree as Mir import qualified Mir.Generator as Mir @@ -115,7 +124,7 @@ ppMIRVal sym (MIRVal shp val) = PrimShape _ _ -> W4.printSymExpr val TupleShape _ _ fldShp -> - PP.parens $ prettyStructOrTuple fldShp val + PP.parens $ prettyAdtOrTuple fldShp val ArrayShape _ _ shp' -> case val of Mir.MirVector_Vector vec -> @@ -130,10 +139,22 @@ ppMIRVal sym (MIRVal shp val) = StructShape _ _ fldShp | AnyValue (StructRepr fldTpr) fldVals <- val , Just Refl <- W4.testEquality (FC.fmapFC fieldShapeType fldShp) fldTpr - -> PP.braces $ prettyStructOrTuple fldShp fldVals + -> PP.braces $ prettyAdtOrTuple fldShp fldVals | otherwise -> error "Malformed MIRVal struct" + EnumShape _ _ variantShps _ _ + | AnyValue (Mir.RustEnumRepr _ variantCtx) + (Ctx.Empty Ctx.:> RV _ Ctx.:> RV variants) <- val + , Just Refl <- W4.testEquality (FC.fmapFC variantShapeType variantShps) variantCtx + -> case firstConcreteVariant variantShps variants of + Just (Some (Functor.Pair fldShps fldVals)) -> + PP.braces $ prettyAdtOrTuple fldShps fldVals + Nothing -> + "" + + | otherwise + -> error "Malformed MIRVal enum" TransparentShape _ shp' -> ppMIRVal sym $ MIRVal shp' val RefShape _ _ _ _ -> @@ -147,12 +168,35 @@ ppMIRVal sym (MIRVal shp val) = commaList [] = PP.emptyDoc commaList (x:xs) = x PP.<> PP.hcat (map (\y -> PP.comma PP.<+> y) xs) - prettyStructOrTuple :: + -- Return Just the first VariantBranch whose predicate is concretely equal + -- to True. If none of the VariantBranches satisfy this property, then + -- return Nothing. + firstConcreteVariant :: + Ctx.Assignment VariantShape ctx -> + Ctx.Assignment (VariantBranch Sym) ctx -> + Maybe (Some (Functor.Product + (Ctx.Assignment FieldShape) + (Ctx.Assignment (RegValue' Sym)))) + firstConcreteVariant variantShapes variantBranches = + List.firstJust + (\(Some (Functor.Pair (VariantShape fldShps) (VB branch))) -> + case branch of + W4.PE fldPred fldVals + | W4.asConstantPred fldPred == Just True + -> Just $ Some $ Functor.Pair fldShps fldVals + | otherwise + -> Nothing + W4.Unassigned -> + Nothing) $ + FC.toListFC Some $ + Ctx.zipWith Functor.Pair variantShapes variantBranches + + prettyAdtOrTuple :: forall ctx. Ctx.Assignment FieldShape ctx -> Ctx.Assignment (RegValue' Sym) ctx -> PP.Doc ann - prettyStructOrTuple fldShp fldVals = + prettyAdtOrTuple fldShp fldVals = commaList $ map (\(Some (Functor.Pair shp' (RV v))) -> prettyField shp' v) $ FC.toListFC Some $ @@ -245,6 +289,12 @@ typeOfSetupValue mcc env nameEnv val = pure $ Mir.TyArray elemTy (length vs) MS.SetupStruct adt _ -> pure $ mirAdtToTy adt + MS.SetupEnum enum_ -> + case enum_ of + MirSetupEnumVariant adt _ _ _ -> + pure $ mirAdtToTy adt + MirSetupEnumSymbolic adt _ _ -> + pure $ mirAdtToTy adt MS.SetupTuple () vals -> do tys <- traverse (typeOfSetupValue mcc env nameEnv) vals pure $ Mir.TyTuple tys @@ -312,48 +362,198 @@ resolveSetupVal mcc env tyenv nameEnv val = MS.SetupStruct adt flds -> case adt of _ | adt ^. Mir.adtReprTransparent, - [fld] <- flds -> do - MIRVal shp fld' <- resolveSetupVal mcc env tyenv nameEnv fld - pure $ MIRVal (TransparentShape (mirAdtToTy adt) shp) fld' - Mir.Adt nm Mir.Struct [variant] _ _ _ _ -> do + [fld] <- flds -> + resolveTransparentSetupVal adt fld + Mir.Adt nm Mir.Struct variants _ _ _ _ -> do + -- First, retrieve the struct variant. + variant <- + case variants of + [variant] -> + pure variant + _ -> + panic "resolveSetupVal" + [ "Encountered struct Adt with " ++ + show (length variants) ++ + " variants:" + , show nm + ] + + -- Next, resolve the field values and check that they have the + -- expected types. flds' <- traverse (resolveSetupVal mcc env tyenv nameEnv) flds let expectedFlds = variant ^. Mir.vfields - let expectedFldsNum = length expectedFlds let actualFldTys = map (\(MIRVal shp _) -> shapeMirTy shp) flds' - let actualFldsNum = length actualFldTys - unless (expectedFldsNum == actualFldsNum) $ - fail $ unlines - [ "Mismatch in number of struct fields" - , "Struct name: " ++ show nm - , "Expected number of fields: " ++ show expectedFldsNum - , "Actual number of fields: " ++ show actualFldsNum - ] - zipWithM_ - (\expectedFld actualFldTy -> - let expectedFldTy = expectedFld ^. Mir.fty in - let expectedFldName = expectedFld ^. Mir.fName in - unless (checkCompatibleTys expectedFldTy actualFldTy) $ - fail $ unlines - [ "Struct field type mismatch" - , "Field name: " ++ show expectedFldName - , "Expected type: " ++ show (PP.pretty expectedFldTy) - , "Given type: " ++ show (PP.pretty actualFldTy) - ]) - expectedFlds - actualFldTys - Some fldAssn <- - pure $ Ctx.fromList $ - map (\(MIRVal shp v) -> - if Mir.canInitialize col (shapeMirTy shp) - then Some $ Functor.Pair (ReqField shp) (RV v) - else Some $ Functor.Pair (OptField shp) (RV (W4.justPartExpr sym v))) - flds' - let (fldShpAssn, valAssn) = Ctx.unzip fldAssn + checkFields nm "Struct" "struct fields" expectedFlds actualFldTys + + -- Finally, construct a MIRVal of the appropriate shape. + Some (Functor.Pair fldShpAssn valAssn) <- + pure $ variantFieldsToAssns sym flds' let structShp = StructShape (mirAdtToTy adt) actualFldTys fldShpAssn let structTpr = StructRepr (FC.fmapFC fieldShapeType fldShpAssn) pure $ MIRVal structShp (AnyValue structTpr valAssn) - Mir.Adt _ ak _ _ _ _ _ -> - panic "resolveSetupVal" ["AdtKind " ++ show ak ++ " not yet implemented"] + Mir.Adt nm (Mir.Enum _) _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected struct type, received enum:" + , show nm + ] + Mir.Adt nm Mir.Union _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected struct type, received union:" + , show nm + ] + MS.SetupEnum enum_ -> + case enum_ of + MirSetupEnumVariant adt variant variantIdxInt flds -> + case adt of + _ | adt ^. Mir.adtReprTransparent, + [fld] <- flds -> do + resolveTransparentSetupVal adt fld + Mir.Adt nm (Mir.Enum discrTp) variants _ _ _ _ -> do + -- Resolve the field values and check that they have the expected + -- types. + flds' <- traverse (resolveSetupVal mcc env tyenv nameEnv) flds + let expectedFlds = variant ^. Mir.vfields + let actualFldTys = map (\(MIRVal shp _) -> shapeMirTy shp) flds' + checkFields + nm + "Enum" + ("fields in enum variant " ++ show (variant ^. Mir.vname)) + expectedFlds + actualFldTys + + -- Ensure that the discriminant has an integral type and build + -- a symbolic bitvector from it. + Some discrTpr <- pure $ Mir.tyToRepr col discrTp + let discrShp = tyToShapeEq col discrTp discrTpr + IsBVShape _ discrW <- pure $ testDiscriminantIsBV discrShp + let discr = getEnumVariantDiscr variant + discrVal <- W4.bvLit sym discrW $ BV.mkBV discrW discr + + -- Construct an EnumShape and RustEnumRepr. This requires + -- processing /all/ variants, not just the particular variant that + -- we are building. + (enumShp, Some expectedVariantShps) <- pure $ + enumShapes adt discrTp discrShp variants + let variantTprs = + FC.fmapFC variantShapeType expectedVariantShps + let enumTpr = Mir.RustEnumRepr + discrTpr + variantTprs + + -- Construct the VariantShape of the particular variant that we + -- are building. + Some variantIdx <- pure $ + variantIntIndex nm variantIdxInt $ + Ctx.size expectedVariantShps + VariantShape expectedFldAssn <- + pure $ expectedVariantShps Ctx.! variantIdx + + -- Check that the actual field values match the expected types. + Some (Functor.Pair actualFldAssn actualValAssn) <- + pure $ variantFieldsToAssns sym flds' + Refl <- + case W4.testEquality expectedFldAssn actualFldAssn of + Just r -> pure r + Nothing -> + panic "resolveSetupVal" + [ "Enum field shape mismatch" + , "Expected: " ++ show expectedFldAssn + , "Actual: " ++ show actualFldAssn + ] + + -- Finally, construct a MIRVal. + let enumVal = + Ctx.empty + Ctx.:> RV discrVal + Ctx.:> RV (injectVariant sym variantTprs variantIdx actualValAssn) + pure $ MIRVal enumShp $ AnyValue enumTpr enumVal + Mir.Adt nm Mir.Struct _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected enum type, received struct:" + , show nm + ] + Mir.Adt nm Mir.Union _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected enum type, received union:" + , show nm + ] + -- See Note [Symbolic enums] in SAWScript.Crucible.MIR.Setup.Value for + -- more information on the approach used to resolve symbolic enum + -- values. + MirSetupEnumSymbolic adt discr variantFlds -> + case adt of + Mir.Adt nm (Mir.Enum discrTp) variants _ _ _ _ -> do + -- Resolve the discriminant value and ensure that it has an + -- integral type. + MIRVal discrShp discrVal <- resolveSetupVal mcc env tyenv nameEnv discr + IsBVShape _ discrW <- pure $ testDiscriminantIsBV discrShp + let discrTpr = shapeType discrShp + + -- Resolve the field values in each possible variant and check + -- that they have the expected types. + variantFlds' <- + zipWithM + (\variant flds -> do + let variantDiscr = getEnumVariantDiscr variant + variantDiscrBV <- W4.bvLit sym discrW $ BV.mkBV discrW variantDiscr + branch <- W4.bvEq sym variantDiscrBV discrVal + flds' <- traverse (resolveSetupVal mcc env tyenv nameEnv) flds + let expectedFlds = variant ^. Mir.vfields + let actualFldTys = map (\(MIRVal shp _) -> shapeMirTy shp) flds' + checkFields + nm + "Enum" + ("fields in enum variant " ++ show (variant ^. Mir.vname)) + expectedFlds + actualFldTys + Some (Functor.Pair fldShpAssn valAssn) <- + pure $ variantFieldsToAssns sym flds' + pure $ Some + $ Functor.Pair + (VariantShape fldShpAssn) + (VB (W4.PE branch valAssn))) + variants + variantFlds + Some variantBranchAssn <- pure $ Ctx.fromList variantFlds' + let (actualVariantShps, branchAssn) = + Ctx.unzip variantBranchAssn + + -- Construct an EnumShape and RustEnumRepr. + (enumShp, Some expectedVariantShps) <- pure $ + enumShapes adt discrTp discrShp variants + let variantTprs = + FC.fmapFC variantShapeType expectedVariantShps + let enumTpr = Mir.RustEnumRepr + discrTpr + variantTprs + + -- Check that the actual variant types match the expected types. + Refl <- + case W4.testEquality expectedVariantShps actualVariantShps of + Just r -> pure r + Nothing -> + panic "resolveSetupVal" + [ "Enum variant shape mismatch" + , "Expected: " ++ show expectedVariantShps + , "Actual: " ++ show actualVariantShps + ] + + -- Finally, construct a MIRVal. + let enumVal = + Ctx.empty + Ctx.:> RV discrVal + Ctx.:> RV branchAssn + pure $ MIRVal enumShp $ AnyValue enumTpr enumVal + Mir.Adt nm Mir.Struct _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected enum type, received struct:" + , show nm + ] + Mir.Adt nm Mir.Union _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected enum type, received union:" + , show nm + ] MS.SetupTuple () flds -> do flds' <- traverse (resolveSetupVal mcc env tyenv nameEnv) flds let fldMirTys = map (\(MIRVal shp _) -> shapeMirTy shp) flds' @@ -427,6 +627,72 @@ resolveSetupVal mcc env tyenv nameEnv val = usizeBvLit :: Sym -> Int -> IO (W4.SymBV Sym Mir.SizeBits) usizeBvLit sym = W4.bvLit sym W4.knownNat . BV.mkBV W4.knownNat . toInteger + -- Perform a light amount of typechecking on the fields in a struct or enum + -- variant. This ensures that the variant receives the expected number of + -- types and that the types of each field match. + checkFields :: + Mir.DefId {- The struct or enum name. (Only used for error messages.) -} -> + String {- "Struct" or "Enum". (Only used for error messages.) -} -> + String {- What type of fields are we checking? + (Only used for error messages.) -} -> + [Mir.Field] {- The expected fields. -} -> + [Mir.Ty] {- The actual field types. -} -> + IO () + checkFields adtNm what fieldDiscr expectedFlds actualFldTys = do + let expectedFldsNum = length expectedFlds + let actualFldsNum = length actualFldTys + unless (expectedFldsNum == actualFldsNum) $ + fail $ unlines + [ "Mismatch in number of " ++ fieldDiscr + , what ++ " name: " ++ show adtNm + , "Expected number of fields: " ++ show expectedFldsNum + , "Actual number of fields: " ++ show actualFldsNum + ] + zipWithM_ + (\expectedFld actualFldTy -> + let expectedFldTy = expectedFld ^. Mir.fty in + let expectedFldName = expectedFld ^. Mir.fName in + unless (checkCompatibleTys expectedFldTy actualFldTy) $ + fail $ unlines + [ what ++ " field type mismatch" + , "Field name: " ++ show expectedFldName + , "Expected type: " ++ show (PP.pretty expectedFldTy) + , "Given type: " ++ show (PP.pretty actualFldTy) + ]) + expectedFlds + actualFldTys + + -- Construct the 'TypeShape' for an enum, along with the 'VariantShape's for + -- the enum's variants. + enumShapes :: + Mir.Adt {- The enum type -} -> + Mir.Ty {- The discriminant's MIR type -} -> + TypeShape discrShp {- The discriminant's TypeShape -} -> + [Mir.Variant] {- The enum's variants -} -> + (TypeShape AnyType, Some (Ctx.Assignment VariantShape)) + enumShapes adt discrTp discrShp variants + | let variantTys = + map (\v -> v ^.. Mir.vfields . each . Mir.fty) variants + , Some variantShps <- + Ctx.fromList $ + map (\fldTys -> + case Ctx.fromList $ + map + (\ty -> + case tyToShape col ty of + Some shp -> + if Mir.canInitialize col ty + then Some $ ReqField shp + else Some $ OptField shp) + fldTys of + Some fldAssn -> Some $ VariantShape fldAssn) + variantTys + , let enumShp = + EnumShape + (mirAdtToTy adt) variantTys + variantShps discrTp discrShp + = (enumShp, Some variantShps) + -- Resolve parts of a slice that are shared in common between -- 'MirSetupSlice' and 'MirSetupSliceRange'. resolveSetupSliceFromArray :: @@ -445,6 +711,36 @@ resolveSetupVal mcc env tyenv nameEnv val = pure $ SetupSliceFromArray elemTpr sliceShp refVal len _ -> X.throwM $ MIRSliceNonArrayReference $ shapeMirTy arrRefShp + -- Resolve a transparent struct or enum value. + resolveTransparentSetupVal :: Mir.Adt -> SetupValue -> IO MIRVal + resolveTransparentSetupVal adt fld = do + MIRVal shp fld' <- resolveSetupVal mcc env tyenv nameEnv fld + pure $ MIRVal (TransparentShape (mirAdtToTy adt) shp) fld' + + -- Given the list of fields in a struct or enum variant, construct two + -- Assignments, where the first Assignment consists of each field's type, + -- and the second assignment consists of each field's value. + variantFieldsToAssns :: + Sym -> + [MIRVal] -> + Some (Functor.Product + (Ctx.Assignment FieldShape) + (Ctx.Assignment (RegValue' Sym))) + variantFieldsToAssns sym flds + | Some fldValAssn <- someFldValAssn + , (fldAssn, valAssn) <- Ctx.unzip fldValAssn + = Some $ Functor.Pair fldAssn valAssn + where + someFldValAssn :: + Some (Ctx.Assignment (Functor.Product FieldShape (RegValue' Sym))) + someFldValAssn = + Ctx.fromList $ + map (\(MIRVal shp v) -> + if Mir.canInitialize col (shapeMirTy shp) + then Some $ Functor.Pair (ReqField shp) (RV v) + else Some $ Functor.Pair (OptField shp) (RV (W4.justPartExpr sym v))) + flds + -- | An intermediate data structure that is only used by -- 'resolveSetupSliceFromArray'. data SetupSliceFromArray where @@ -697,6 +993,21 @@ equalValsPred cc mv1 mv2 = goFldAssn fldShp fldAssn1 fldAssn2 (_, _) -> pure $ W4.falsePred sym + goTy (EnumShape _ _ variantShp _ discrShp) any1 any2 = + case (any1, any2) of + (AnyValue (Mir.RustEnumRepr discrTpr1 variantCtx1) + (Ctx.Empty Ctx.:> RV discr1 Ctx.:> RV variant1), + AnyValue (Mir.RustEnumRepr discrTpr2 variantCtx2) + (Ctx.Empty Ctx.:> RV discr2 Ctx.:> RV variant2)) -> do + Refl <- testEquality discrTpr1 discrTpr2 + Refl <- testEquality (shapeType discrShp) discrTpr1 + Refl <- testEquality variantCtx1 variantCtx2 + Refl <- testEquality (FC.fmapFC variantShapeType variantShp) variantCtx1 + discrPred <- goTy discrShp discr1 discr2 + variantPred <- goVariantAssn variantShp variant1 variant2 + liftIO $ W4.andPred sym discrPred variantPred + (_, _) -> + pure $ W4.falsePred sym goTy (TransparentShape _ shp) v1 v2 = goTy shp v1 v2 goTy (RefShape _ _ _ _) ref1 ref2 = @@ -749,6 +1060,34 @@ equalValsPred cc mv1 mv2 = (W4.truePred sym) (Ctx.zipWith Functor.Pair fldAssn1 fldAssn2) + goVariantAssn :: Ctx.Assignment VariantShape ctx + -> Ctx.Assignment (VariantBranch Sym) ctx + -> Ctx.Assignment (VariantBranch Sym) ctx + -> MaybeT IO (W4.Pred Sym) + goVariantAssn variantShp vbAssn1 vbAssn2 = + FCI.ifoldrMFC + (\idx (Functor.Pair (VB var1) (VB var2)) z -> do + VariantShape fldShp <- pure $ variantShp Ctx.! idx + varPred <- goVariantFlds fldShp var1 var2 + liftIO $ W4.andPred sym varPred z) + (W4.truePred sym) + (Ctx.zipWith Functor.Pair vbAssn1 vbAssn2) + + goVariantFlds :: Ctx.Assignment FieldShape ctx + -> W4.PartExpr (W4.Pred Sym) (Ctx.Assignment (RegValue' Sym) ctx) + -> W4.PartExpr (W4.Pred Sym) (Ctx.Assignment (RegValue' Sym) ctx) + -> MaybeT IO (W4.Pred Sym) + goVariantFlds fldShp (W4.PE p1 fldAssn1) (W4.PE p2 fldAssn2) = do + pPred <- liftIO $ W4.eqPred sym p1 p2 + fldPred <- goFldAssn fldShp fldAssn1 fldAssn2 + liftIO $ W4.andPred sym pPred fldPred + goVariantFlds _ W4.Unassigned W4.Unassigned = + pure $ W4.truePred sym + goVariantFlds _ (W4.PE{}) W4.Unassigned = + pure $ W4.falsePred sym + goVariantFlds _ W4.Unassigned (W4.PE{}) = + pure $ W4.falsePred sym + goFld :: FieldShape tp -> RegValue Sym tp -> RegValue Sym tp @@ -1164,3 +1503,48 @@ staticTyRef static = Mir.TyRef (static ^. Mir.sTy) (staticMutability static) + +-- | Retrieve the discriminant corresponding to an enum variant. This function +-- will panic if the variant does not contain a discriminant. +getEnumVariantDiscr :: Mir.Variant -> Integer +getEnumVariantDiscr variant = + case variant ^. Mir.discrval of + Just discr -> + discr + Nothing -> + panic "getEnumVariantDiscr" + [ "discrval not set for variant:" + , show (variant ^. Mir.vname) + ] + +-- | An enum's discriminant should have an integral type such as @isize@ or +-- @i8@, which this function checks. If this is not the case, this function will +-- panic. +testDiscriminantIsBV :: TypeShape shp -> IsBVShape shp +testDiscriminantIsBV discrShp = + case testBVShape discrShp of + Just ibvs -> ibvs + Nothing -> + panic "testDiscriminantIsBV" + [ "Unexpected non-integral discriminant type:" + , show $ PP.pretty $ shapeMirTy discrShp + ] + +-- | Compute the index of a variant as an 'Ctx.Index'. If the index is out of +-- range, this function will panic. +variantIntIndex :: + Mir.DefId {-^ The enum identifier. (Only used for error messages.) -} -> + Int {-^ The index of the variant as an 'Int'. -} -> + Ctx.Size ctx {-^ The number of variants as a 'Ctx.Size'. -} -> + Some (Ctx.Index ctx) +variantIntIndex adtNm variantIdx variantsSize = + case Ctx.intIndex variantIdx variantsSize of + Just someIdx -> + someIdx + Nothing -> + panic "variantIntIndex" + [ "Enum variant index out of range" + , "Enum: " ++ show adtNm + , "Index: " ++ show variantIdx + , "Number of variants: " ++ show variantsSize + ] diff --git a/src/SAWScript/Crucible/MIR/Setup/Value.hs b/src/SAWScript/Crucible/MIR/Setup/Value.hs index bbdfbd85a9..e288f12ca6 100644 --- a/src/SAWScript/Crucible/MIR/Setup/Value.hs +++ b/src/SAWScript/Crucible/MIR/Setup/Value.hs @@ -12,10 +12,13 @@ module, plus additional functionality) instead. -} {-# Language DataKinds #-} +{-# Language GADTs #-} {-# Language OverloadedStrings #-} {-# Language RankNTypes #-} +{-# Language StandaloneDeriving #-} {-# Language TemplateHaskell #-} {-# Language TypeFamilies #-} +{-# Language TypeOperators #-} module SAWScript.Crucible.MIR.Setup.Value ( -- * @MIRCrucibleContext@ @@ -47,6 +50,9 @@ module SAWScript.Crucible.MIR.Setup.Value , mpMirType , mpRef + -- * @MirSetupEnum@ + , MirSetupEnum(..) + -- * @MirSetupSlice@ , MirSetupSlice(..) ) where @@ -71,6 +77,7 @@ import qualified SAWScript.Crucible.Common.Setup.Value as MS type instance MS.XSetupNull MIR = Void type instance MS.XSetupGlobal MIR = () type instance MS.XSetupStruct MIR = M.Adt +type instance MS.XSetupEnum MIR = MirSetupEnum type instance MS.XSetupTuple MIR = () type instance MS.XSetupSlice MIR = MirSetupSlice -- The 'M.Ty' represents the type of array elements. @@ -138,6 +145,71 @@ data MirPointer sym tp = MirPointer , _mpRef :: MirReferenceMux sym tp } +-- | A enum-related MIR 'SetupValue'. +data MirSetupEnum where + -- | A specific variant of an enum. + MirSetupEnumVariant :: + M.Adt + -- ^ The enum type. + -> M.Variant + -- ^ The variant to use. + -> Int + -- ^ The index of the variant within the list of all the enum's variants. + -- In most circumstances, this index will be the same as the discriminant + -- value, but the index can be different if a variant uses an explicit + -- value. For instance, in this example: + -- + -- @ + -- enum A { + -- A0, + -- A1, + -- } + -- + -- enum B { + -- B0 = 42, + -- B1, + -- } + -- @ + -- + -- The indexes for @A0@ and @B0@ are both @0@, and the indexes for @A1@ + -- and @B1@ are both @1@. The discriminant values are different, however. + -- The discriminants for @A0@ and @A1@ are @0@ and @1@, respectively, + -- while the discriminants for @B0@ and @B1@ are @42@ and @43@, + -- respectively. + -- + -- Note that the index is accessible within the 'M.Variant' argument, but + -- retrieving the information is somewhat involved. (See the + -- implementation of @mir_enum_value@.) For this reason, we store this + -- information separately in 'MirSetupEnumVariant' to make it easier to + -- look up later. + -> [MS.SetupValue MIR] + -- ^ The values of the variant's fields. + -> MirSetupEnum + + -- | A symbolic enum value, where the 'M.Adt' represents the enum type. + -- This is only used in the implementation of @mir_fresh_expanded_value@. + -- See @Note [Symbolic enums]@ for a more detailed explanation. + MirSetupEnumSymbolic :: + M.Adt + -- ^ The enum type. + -> MS.SetupValue MIR + -- ^ The symbolic discriminant value. + -> [[MS.SetupValue MIR]] + -- ^ The symbolic values that are used for the fields in each variant. + -- For instance, if one created a symbolic value of this type: + -- + -- @ + -- enum E { + -- E1(u16), + -- E2(u32, u32), + -- @ + -- + -- Then the list of fields would be @[[x], [y, z]]@, where @x: u16@ + -- are the fields of @E1@, and @y: u32@ and @z: u32@ are the fields of + -- @E2@. + -> MirSetupEnum + deriving Show + -- | A slice-related MIR 'SetupValue'. data MirSetupSlice = MirSetupSliceRaw (MS.SetupValue MIR) (MS.SetupValue MIR) @@ -157,3 +229,137 @@ data MirSetupSlice makeLenses ''MIRCrucibleContext makeLenses ''MirAllocSpec makeLenses ''MirPointer + +{- +Note [Symbolic enums] +~~~~~~~~~~~~~~~~~~~~~ +Creating a symbolic MIR enum value is not quite as straightforward as creating +symbolic versions of other compound types, mostly due to the atypical Crucible +representation that enums use. To recap, if we have an enum like this: + + enum E { + E1(u16), + E2(u32, u32), + } + +Then this will be implemented using (roughly) the following Crucible `Type` +under the hood: + + (BVType 64, VariantType [StructType [BVType 16], StructType [BVType 32, BVType 32]]) + +Where: + +* The `BVType 64` is a /discriminant/, whose value indicates which variant is + in use. For instance, a discriminant value of `0` indicates that the `E1` + variant is in use, and a discriminant value of `1` indicates that the `E2` + variant is in use. +* The `VariantType ...` indicates that there are two variants in this enum, + where each variant is represented as a struct with the corresponding fields + in that variant. + +At simulation time, VariantTypes are represented as a sequence of +VariantBranches, where a VariantBranch is (roughly) a pair of: + +* A (possibly symbolic) predicate indicating if that variant is being used, and +* A payload representing the fields of the enum. If the predicate does not + hold, then the payload will likely be symbolic, since it does not matter what + the payload value is in that case. + +OK, recap over. Let's get back to the original question: how do we make a +symbolic value of this type? A naïve first attempt is to generate fresh +symbolic values for everything. That is, a symbolic discriminant, as well as a +symbolic predicate and payload for each VariantBranch. While tempting, this +approach won't work. To see why, consider what happens when one pattern matches +on a symbolic enum value. For example, the `match` expression in this function: + + fn foo(x: E) -> u32 { + match x { + E::E1(a) => bar(y), + E::E2(b, c) => baz(b, c), + } + } + +Would turn into the (roughly) following MIR: + + fn foo(x : E) -> u32 { + start_block: { + discr = Discriminant(x, isize); + switchint discr :isize [0, 1] -> [e1_block, e2_block, fallthrough_block] + } + e1_block: { + ... call bar() ... + } + e2_block: { + ... call baz() ... + } + fallthrough_block: { + unreachable; + } + ... + } + +Here, the `switchint discr` statement will check the value of `discr` (the +discriminant), and if it equals `0`, go to `e1_block`; if it equals `1`, go to +`e2_block`; and if it equals something else, go to `fallthrough_block`. In +normal circumstances, `discr` should only ever be equal to `0` or `1`, which +implies that `fallthrough_block` should never be accessible (as indicated by +its `unreachable` instruction). + +Now consider what would happen if the discriminant were an unconstrained, +symbolic value. While a symbolic discriminant could be equal to `0` or `1`, it +could also be equal to any other value! This would spell disaster if Crucible +tried to perform a symbolic branch on, say, `discr == 2`, since that would +cause execution to reach `fallthrough_block` and crash. We want a symbolic +discriminant, but we don't want it to be /that/ symbolic! + +For this reason, after we create a symbolic discriminant value, we also add a +Crucible assumption that the discriminant must be equal to one of the possible +enum variants' discriminants. In the example above, this means that we would +assume assume the following: + + (discr == 0) \/ (discr == 1) + +This way, symbolic execution will never reach `fallthrough_block`. This +Crucible assumption is created in +SAWScript.Crucible.MIR.Builtins.constructExpandedSetupValue.goEnum`. + +Similarly, we cannot make the VariantBranch predicates completely symbolic, as +whether a predicate holds or not depends on the value of the discriminant. For +this reason, we do not create fresh variables for each predicate, but instead +make each predicate the result of checking the discriminant against particular +values. For instance, the predicate for the `E1` VariantBranch is defined to be +`discr == 0`, and the predicate for the `E2` VariantBranch is defined to be +`discr == 1`. These predicates are defined in +`SAWScript.Crucible.MIR.ResolveSetupValue.resolveSetupValue`, along with the +fields in the associated payloads. + +Lastly, there are the payloads (i.e., the fields of each variant) in each +VariantBranch. These are created as completely symbolic values—the trick is to +only access the fields when the corresponding predicate holds. For example, +`SAWScript.Crucible.MIR.Override.matchArg` (in the `MirSetupEnumSymbolic` case) +must be able to match two possibly symbolic enum values together, but it must +be careful to only match the fields in a variant if that VariantBranch's +predicate holds. + +To make this a bit more specific, suppose we have two symbolic enum values +`enumA` and `enumA`, where: + +* `enumA` has the discriminant value `discrA`, and + `enumB` has the discriminant value `discrB`. +* `enumA` has the VariantBranches [(e1_pred_a, [e1_fld1_a]), (e2_pred_a, [e2_fld1_a, e2_fld2_a])], and + `enumB` has the VariantBranches [(e1_pred_b, [e1_fld1_b]), (e2_pred_b, [e2_fld1_b, e2_fld2_b])]. + +We only want to match `e1_fld1_a` against `e1_fld1_b` if both enums are using +the `E1` variant, that is, if `e1_pred_a` and `e_pred_b` hold. To this end, the +`matchArg` function checks this by generating (roughly) the following +assertion: + + (discrA == discrB) /\ + (e1_pred_a ==> (e1_fld1_a == e1_fld1_b)) + +(Note that instead of `e1_pred_a ==> ...`, we could have alternatively used +`e1_pred_b ==> ...`, `(discrA == 0) ==> ...`, or `(discrB == 0) ==> ...`. All +formulations are equivalent.) + +Phew! Enums are surprisingly tricky. +-} diff --git a/src/SAWScript/Crucible/MIR/TypeShape.hs b/src/SAWScript/Crucible/MIR/TypeShape.hs index f24d372ea8..92aa2f80c8 100644 --- a/src/SAWScript/Crucible/MIR/TypeShape.hs +++ b/src/SAWScript/Crucible/MIR/TypeShape.hs @@ -6,18 +6,23 @@ {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeOperators #-} -- | The 'TypeShape' data type and related utilities. module SAWScript.Crucible.MIR.TypeShape ( TypeShape(..) , FieldShape(..) + , VariantShape(..) , tyToShape , tyToShapeEq , shapeType , fieldShapeType + , variantShapeType , shapeMirTy , fieldShapeMirTy , shapeToTerm + , IsBVShape(..) + , testBVShape , IsRefShape(..) , testRefShape , sliceShapeParts @@ -95,6 +100,21 @@ data TypeShape (tp :: CrucibleType) where -> TypeRepr tp -- ^ The Crucible representation of @T@. -> TypeShape (MirSlice tp) + -- | A shape for an enum type. Like 'StructShape', this is indexed by + -- 'AnyType', so code that matches on 'EnumShape' may need to further match + -- on the 'VariantShape's in order to bring additional type information into + -- scope. + EnumShape :: M.Ty + -- ^ The overall enum type. + -> [[M.Ty]] + -- ^ The field types in each of the enum's variants. + -> Assignment VariantShape ctx + -- ^ The shapes of the enum type's variants. + -> M.Ty + -- ^ The discriminant type. + -> TypeShape discrTp + -- ^ The shape of the discriminant type. + -> TypeShape AnyType -- | Note that 'FnPtrShape' contains only 'TypeRepr's for the argument and -- result types, not 'TypeShape's, as none of our operations need to recurse -- inside them. @@ -121,6 +141,25 @@ instance PP.Pretty (FieldShape tp) where deriving instance Show (FieldShape tp) instance ShowF FieldShape +-- | The 'TypeShape' of an enum variant, which consists of some number of field +-- types. +-- +-- This is indexed by a 'StructType', but that is simply an artifact of the +-- particular way that @crucible-mir@ encodes enum types. Despite the use of +-- 'StructType' as a type index, we only use 'VariantShape' for enums, not +-- structs. +data VariantShape (tp :: CrucibleType) where + VariantShape :: Assignment FieldShape ctx + -- ^ The shapes of the variant's field types. + -> VariantShape (StructType ctx) + +-- TODO: Improve? +instance PP.Pretty (VariantShape tp) where + pretty = PP.viaShow + +deriving instance Show (VariantShape tp) +instance ShowF VariantShape + -- | Return the `TypeShape` of `ty`. -- -- It is guaranteed that the `tp :: CrucibleType` index of the resulting @@ -142,8 +181,16 @@ tyToShape col = go M.TyAdt nm _ _ -> case Map.lookup nm (col ^. M.adts) of Just adt | Just ty' <- reprTransparentFieldTy col adt -> mapSome (TransparentShape ty) $ go ty' - Just (M.Adt _ M.Struct [v] _ _ _ _) -> goStruct ty (v ^.. M.vfields . each . M.fty) - Just (M.Adt _ ak _ _ _ _ _) -> error $ "tyToShape: AdtKind " ++ show ak ++ " NYI" + Just (M.Adt _ kind vs _ _ _ _) -> + case kind of + M.Struct + | [v] <- vs + -> goStruct ty (variantFieldTys v) + | otherwise + -> error $ "tyToShape: Unexpected struct with multiple variants: " + ++ show (PP.pretty vs) + M.Enum discrTy -> goEnum ty discrTy vs + M.Union -> error "tyToShape: Union types NYI" Nothing -> error $ "tyToShape: bad adt: " ++ show ty M.TyRef ty' mutbl -> goRef ty ty' mutbl M.TyRawPtr ty' mutbl -> goRef ty ty' mutbl @@ -167,7 +214,38 @@ tyToShape col = go loop (ty':tys') flds | Some fld <- go ty' = loop tys' (flds :> OptField fld) goStruct :: M.Ty -> [M.Ty] -> Some TypeShape - goStruct ty tys | Some flds <- loop tys Empty = Some $ StructShape ty tys flds + goStruct ty tys | Some flds <- goFields tys = Some $ StructShape ty tys flds + + -- The first Ty is the overall enum type, and the second Ty is the + -- discriminant type. + goEnum :: M.Ty -> M.Ty -> [M.Variant] -> Some TypeShape + goEnum ty discrTy vs + | Some discrShp <- go discrTy + , Some variants <- loop vs Empty + = Some $ EnumShape ty variantTys variants discrTy discrShp + where + variantTys = map variantFieldTys vs + + loop :: + forall ctx. + [M.Variant] -> + Assignment VariantShape ctx -> + Some (Assignment VariantShape) + loop [] variants = Some variants + loop (v':vs') variants + | Some variant <- goVariant v' + = loop vs' (variants :> variant) + + -- Process a single Variant in an enum type. + goVariant :: M.Variant -> Some VariantShape + goVariant v + | Some flds <- goFields tys + = Some $ VariantShape flds + where + tys = variantFieldTys v + + goFields :: [M.Ty] -> Some (Assignment FieldShape) + goFields tys = loop tys Empty where loop :: forall ctx. [M.Ty] -> Assignment FieldShape ctx -> Some (Assignment FieldShape) loop [] flds = Some flds @@ -195,6 +273,11 @@ tyToShape col = go tyToReprCont col ret $ \retr -> Some (FnPtrShape ty argsr retr) + -- Retrieve the field types in a variant. This used for both struct and enum + -- variants. + variantFieldTys :: M.Variant -> [M.Ty] + variantFieldTys v = v ^.. M.vfields . each . M.fty + -- | Given a `Ty` and the result of `tyToRepr ty`, produce a `TypeShape` with -- the same index `tp`. Raises an `error` if the `TypeRepr` doesn't match -- `tyToRepr ty`. @@ -215,6 +298,7 @@ shapeType = go go (TupleShape _ _ flds) = StructRepr $ fmapFC fieldShapeType flds go (ArrayShape _ _ shp) = MirVectorRepr $ shapeType shp go (StructShape _ _ _flds) = AnyRepr + go (EnumShape _ _ _ _ _variants) = AnyRepr go (TransparentShape _ shp) = go shp go (RefShape _ _ _ tpr) = MirReferenceRepr tpr go (SliceShape _ _ _ tpr) = MirSliceRepr tpr @@ -224,12 +308,17 @@ fieldShapeType :: FieldShape tp -> TypeRepr tp fieldShapeType (ReqField shp) = shapeType shp fieldShapeType (OptField shp) = MaybeRepr $ shapeType shp +variantShapeType :: VariantShape tp -> TypeRepr tp +variantShapeType (VariantShape flds) = + StructRepr $ fmapFC fieldShapeType flds + shapeMirTy :: TypeShape tp -> M.Ty shapeMirTy (UnitShape ty) = ty shapeMirTy (PrimShape ty _) = ty shapeMirTy (TupleShape ty _ _) = ty shapeMirTy (ArrayShape ty _ _) = ty shapeMirTy (StructShape ty _ _) = ty +shapeMirTy (EnumShape ty _ _ _ _) = ty shapeMirTy (TransparentShape ty _) = ty shapeMirTy (RefShape ty _ _ _) = ty shapeMirTy (SliceShape ty _ _ _) = ty @@ -263,6 +352,24 @@ shapeToTerm sc = go goField (OptField shp) = go shp goField (ReqField shp) = go shp +-- | A witness that a 'TypeShape' is equal to a 'PrimShape' that characterizes +-- a bitvector. +data IsBVShape (tp :: CrucibleType) where + IsBVShape :: (1 <= w) + => M.Ty + -> NatRepr w + -> IsBVShape (BVType w) + +-- | Check that a 'TypeShape' is equal to a 'PrimShape' that characterizes a +-- bitvector. If so, return 'Just' a witness of that equality. Otherwise, return +-- 'Nothing'. +testBVShape :: TypeShape tp -> Maybe (IsBVShape tp) +testBVShape shp = + case shp of + PrimShape ty (BaseBVRepr w) + -> Just $ IsBVShape ty w + _ -> Nothing + -- | A witness that a 'TypeShape' is equal to a 'RefShape'. data IsRefShape (tp :: CrucibleType) where IsRefShape :: M.Ty @@ -313,6 +420,13 @@ instance TestEquality TypeShape where , (TypeApp (ConType [t|CtxRepr|]) AnyType, [|testEquality|]) ]) +instance TestEquality VariantShape where + testEquality = + $(structuralTypeEquality + [t|VariantShape|] + [ (TypeApp (TypeApp (ConType [t|Assignment|]) AnyType) AnyType, [|testEquality|]) + ]) + instance TestEquality FieldShape where testEquality = $(structuralTypeEquality diff --git a/src/SAWScript/Interpreter.hs b/src/SAWScript/Interpreter.hs index 34a021d769..c8e360f3e6 100644 --- a/src/SAWScript/Interpreter.hs +++ b/src/SAWScript/Interpreter.hs @@ -3936,6 +3936,15 @@ primitives = Map.fromList , "it appears (i.e., before or after `mir_execute_func`)." ] + , prim "mir_enum_value" "MIRAdt -> String -> [MIRValue] -> MIRValue" + (funVal3 mir_enum_value) + Experimental + [ "Create a MIRValue representing a variant of a MIR enum with the given" + , "list of values as elements. The MIRAdt argument determines what enum" + , "type to create; use `mir_find_adt` to retrieve a MIRAdt value. The" + , "String argument represents the variant name." + ] + , prim "mir_execute_func" "[MIRValue] -> MIRSetup ()" (pureVal mir_execute_func) Experimental