diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..402a3d9 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,60 @@ +name: 'Test' +on: + pull_request: + branches: [ "master" ] + push: + branches: [ "master" ] + workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + CARGO_TERM_COLOR: always + +jobs: + + integration-tests: + name: "Integration tests" + runs-on: [self-hosted, linux, normal] + steps: + - name: 'Check out code' + uses: actions/checkout@v4 + with: + # Check out pull request HEAD instead of merge commit. + ref: ${{ github.event.pull_request.head.sha }} + submodules: recursive + + - name: "Set up nightly Rust" # https://github.com/rust-lang/rustup/issues/3409 + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly-2024-08-28 + + - name: 'Set up tree for rust dependency' + run: make setup + + - name: 'Cache smir_pretty and rustc' + uses: Swatinem/rust-cache@v2 + with: + workspaces: | + . + deps/rust/src + cache-directories: | + target + deps/rust/src/build + deps/rust/src/target + + - name: 'Build smir_pretty and its rustc dependency' + run: | # rustc bootstrap checks this and refuses stage 1 in "CI" + export GITHUB_ACTIONS="in denial" && \ + echo "GITHUB_ACTIONS = ${GITHUB_ACTIONS}" && \ + make build_all + + - name: 'Run smir integration tests' + run: | + make integration-test + + - name: 'Clean up toolchain' + if: always() + run: | + make rustup-clear-toolchain diff --git a/Cargo.lock b/Cargo.lock index 0f649e9..6a288eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", diff --git a/Makefile b/Makefile index 53903ca..eb361c2 100644 --- a/Makefile +++ b/Makefile @@ -16,20 +16,27 @@ RUST_LIB_DIR=${RUST_INSTALL_DIR}/lib RUST_DEP_DIR=${RUST_BUILD_DIR}/stage1-rustc/${RUST_ARCH}/release/deps TARGET_DEP_DIR=${CURDIR}/target/${TARGET}/deps TEMP_DIR=${RUST_DIR}/temp -RUST_REPO=https://github.com/runtimeverification/rust -RUST_BRANCH=smir_serde_derive_intern_scripts -TOOLCHAIN_NAME=smir_serde_derive_intern_scripts +############################################# +# depend on the rust compiler +RUST_REPO=https://github.com/rust-lang/rust +# tip of the `beta` branch on 2025-01-14 +RUST_BRANCH=beta +RUST_COMMIT=fe9b975 +############################################# +TOOLCHAIN_NAME=smir_pretty RELEASE_FLAG= ifeq (${TARGET}, release) RELEASE_FLAG=--release endif +default: build + build_all: rust_build rust_set_toolchain build setup: rust_clone update: ${RUST_SRC} - cd "${RUST_SRC}"; git fetch origin; git reset --hard origin/${RUST_BRANCH} + cd "${RUST_SRC}"; git fetch origin; git checkout ${RUST_COMMIT} build: cargo build ${RELEASE_FLAG} @@ -53,7 +60,9 @@ prebuild_clean: ${RUST_SRC} # NOTE: a deeper clone depth is needed for the build process rust_clone: - git clone --depth 70 --single-branch --branch "${RUST_BRANCH}" "${RUST_REPO}" "${RUST_SRC}" + git clone --depth 70 --single-branch --branch "${RUST_BRANCH}" "${RUST_REPO}" "${RUST_SRC}" && \ + cd "${RUST_SRC}" && \ + git checkout ${RUST_COMMIT} # rust_build for linking against custom rustc is involved @@ -79,8 +88,42 @@ rust_set_toolchain: ${RUST_LIB_DIR} rustup override set "${TOOLCHAIN_NAME}" echo ${STAGE} > ${STAGE_FILE} +.PHONY: rustup-clear-toolchain +rustup-clear-toolchain: + rustup override unset + rustup override unset --nonexistent + rustup toolchain uninstall "${TOOLCHAIN_NAME}" + generate_ui_tests: mkdir -p "${RUST_DIR}"/tests cd "${RUST_SRC}"; ./get_runpass.sh tests/ui > "${RUST_DIR}"/tests_ui_sources -cd "${RUST_SRC}"; ./ui_compiletest.sh "${RUST_SRC}" "${RUST_DIR}"/tests/ui/upstream "${RUST_DIR}"/tests_ui_sources --pass check --force-rerun 2>&1 > "${RUST_DIR}"/tests_ui_upstream.log -cd "${RUST_SRC}"; RUST_BIN="${PWD}"/run.sh ./ui_compiletest.sh "${RUST_SRC}" "${RUST_DIR}"/tests/ui/smir "${RUST_DIR}"/tests_ui_sources --pass check --force-rerun 2>&1 > "${RUST_DIR}"/tests_ui_smir.log + +TESTDIR=$(CURDIR)/tests/integration/programs + +.PHONY: integration-test +integration-test: TESTS ?= $(shell find $(TESTDIR) -type f -name "*.rs") +integration-test: SMIR ?= $(CURDIR)/run.sh -Z no-codegen +# override this to tweak how expectations are formatted +integration-test: NORMALIZE ?= jq -S -e -f $(TESTDIR)/../normalise-filter.jq +# override this to re-make golden files +integration-test: DIFF ?= | diff - +integration-test: build + errors=""; \ + report() { echo "$$1: $$2"; errors="$$errors\n$$1: $$2"; }; \ + for rust in ${TESTS}; do \ + target=$${rust%.rs}.smir.json; \ + dir=$$(dirname $${rust}); \ + echo "$$rust"; \ + ${SMIR} --out-dir $${dir} $${rust} || report "$$rust" "Conversion failed"; \ + [ -f $${target} ] \ + && ${NORMALIZE} $${target} ${DIFF} $${target}.expected \ + && rm $${target} \ + || report "$$rust" "Unexpected json output"; \ + done; \ + [ -z "$$errors" ] || (echo "===============\nFAILING TESTS:$$errors"; exit 1) + + +golden: + make integration-test DIFF=">" diff --git a/panic_example.rs b/panic_example.rs deleted file mode 100644 index c307e16..0000000 --- a/panic_example.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - panic!() -} \ No newline at end of file diff --git a/panic_example.rs b/panic_example.rs new file mode 120000 index 0000000..ceaa7a0 --- /dev/null +++ b/panic_example.rs @@ -0,0 +1 @@ +tests/integration/failing/panic_example.rs \ No newline at end of file diff --git a/panic_example.smir.json b/panic_example.smir.json deleted file mode 100644 index 9ae1248..0000000 --- a/panic_example.smir.json +++ /dev/null @@ -1 +0,0 @@ -{"name": "panic_example", "crate_id": 3804531016856674905, "allocs": [[0,{"Memory":{"bytes":[117,110,115,97,102,101,32,112,114,101,99,111,110,100,105,116,105,111,110,40,115,41,32,118,105,111,108,97,116,101,100,58,32,112,116,114,58,58,114,101,97,100,95,118,111,108,97,116,105,108,101,32,114,101,113,117,105,114,101,115,32,116,104,97,116,32,116,104,101,32,112,111,105,110,116,101,114,32,97,114,103,117,109,101,110,116,32,105,115,32,97,108,105,103,110,101,100,32,97,110,100,32,110,111,110,45,110,117,108,108],"provenance":{"ptrs":[]},"align":1,"mutability":"Not"}}],[1,{"Memory":{"bytes":[0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0],"provenance":{"ptrs":[[0,12]]},"align":8,"mutability":"Not"}}],[2,{"Memory":{"bytes":[],"provenance":{"ptrs":[]},"align":8,"mutability":"Not"}}],[3,{"Memory":{"bytes":[0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0],"provenance":{"ptrs":[[0,13]]},"align":8,"mutability":"Not"}}],[4,{"Memory":{"bytes":[117,110,115,97,102,101,32,112,114,101,99,111,110,100,105,116,105,111,110,40,115,41,32,118,105,111,108,97,116,101,100,58,32,78,111,110,78,117,108,108,58,58,110,101,119,95,117,110,99,104,101,99,107,101,100,32,114,101,113,117,105,114,101,115,32,116,104,97,116,32,116,104,101,32,112,111,105,110,116,101,114,32,105,115,32,110,111,110,45,110,117,108,108],"provenance":{"ptrs":[]},"align":1,"mutability":"Not"}}],[5,{"Memory":{"bytes":[],"provenance":{"ptrs":[]},"align":1,"mutability":"Not"}}],[6,{"Memory":{"bytes":[],"provenance":{"ptrs":[]},"align":1,"mutability":"Not"}}],[7,{"Static":100}],[8,{"Memory":{"bytes":[101,120,112,108,105,99,105,116,32,112,97,110,105,99],"provenance":{"ptrs":[]},"align":1,"mutability":"Not"}}],[12,{"Memory":{"bytes":[105,115,95,97,108,105,103,110,101,100,95,116,111,58,32,97,108,105,103,110,32,105,115,32,110,111,116,32,97,32,112,111,119,101,114,45,111,102,45,116,119,111],"provenance":{"ptrs":[]},"align":1,"mutability":"Not"}}],[13,{"Memory":{"bytes":[105,115,95,97,108,105,103,110,101,100,95,116,111,58,32,97,108,105,103,110,32,105,115,32,110,111,116,32,97,32,112,111,119,101,114,45,111,102,45,116,119,111],"provenance":{"ptrs":[]},"align":1,"mutability":"Not"}}]], "functions": [[7,{"NormalSym":"_ZN3std2rt19lang_start_internal17h51b943990c0e2c96E"}],[80,{"NormalSym":"_ZN4core3ptr8non_null16NonNull$LT$T$GT$13new_unchecked18precondition_check17h180abd43edd08785E"}],[20,{"NormalSym":"_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h163f76a593f9a61dE"}],[36,{"NormalSym":"_ZN3std9panicking20rust_panic_with_hook17he6fc28793b894d73E"}],[101,{"NormalSym":"_ZN5alloc5boxed12Box$LT$T$GT$3new17hfb7bad2afdef8431E"}],[112,{"NormalSym":"_ZN3std9panicking11begin_panic17h046658c3c0b9185bE"}],[114,{"NoOpSym":""}],[76,{"IntrinsicSym":"volatile_load"}],[115,{"NoOpSym":""}],[63,{"NormalSym":"_ZN5alloc5alloc6Global10alloc_impl17hfeb4b7829cd89493E"}],[42,{"NormalSym":"_ZN4core3ops8function6FnOnce9call_once17h86e2963be1a2fd6aE"}],[66,{"NormalSym":"_ZN5alloc5alloc18handle_alloc_error17h367988acd01d106aE"}],[78,{"NormalSym":"__rust_alloc_zeroed"}],[0,{"IntrinsicSym":"type_id"}],[50,{"NormalSym":"_ZN4core9panicking9panic_fmt17h8510a50a874ddcc2E"}],[93,{"NormalSym":"_ZN3std7process5abort17h4d7b628a2864edb7E"}],[75,{"NormalSym":"_ZN4core3ptr13read_volatile18precondition_check17hc773488a477a662fE"}],[29,{"NormalSym":"_ZN4core3ops8function6FnOnce9call_once17h11ec6afa27e3d406E"}],[30,{"IntrinsicSym":"caller_location"}],[113,{"NormalSym":"_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h6e8cf99dfda5fdefE"}],[79,{"NormalSym":"_ZN5alloc5alloc5alloc17h214157fcd92df279E"}],[49,{"IntrinsicSym":"ctpop"}],[48,{"NormalSym":"_ZN4core9panicking14panic_nounwind17hee6445121510e179E"}],[116,{"NoOpSym":""}],[31,{"NormalSym":"_ZN3std3sys9backtrace26__rust_end_short_backtrace17h4bae7cc86322177bE"}],[88,{"NormalSym":"_ZN5alloc5alloc15exchange_malloc17h5443007c4b77064aE"}],[96,{"NormalSym":"_ZN4core3fmt9Formatter9write_str17hd334b351ded225feE"}],[26,{"IntrinsicSym":"black_box"}],[73,{"NormalSym":"__rust_alloc"}],[94,{"NormalSym":"_ZN3std9panicking14payload_as_str17h5ede2995a2a0c693E"}]], "items": [{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":1,"projection":[]}},{"Constant":{"const_":{"id":6,"kind":"ZeroSized","ty":8},"span":50,"user_ty":null}}],"destination":{"local":0,"projection":[]},"func":{"Constant":{"const_":{"id":5,"kind":"ZeroSized","ty":25},"span":49,"user_ty":null}},"target":1,"unwind":"Continue"}},"span":51}},{"statements":[],"terminator":{"kind":{"Call":{"args":[{"Constant":{"const_":{"id":6,"kind":"ZeroSized","ty":8},"span":50,"user_ty":null}}],"destination":{"local":2,"projection":[]},"func":{"Constant":{"const_":{"id":7,"kind":"ZeroSized","ty":26},"span":52,"user_ty":null}},"target":2,"unwind":"Unreachable"}},"span":53}},{"statements":[],"terminator":{"kind":"Return","span":54}}],"locals":[{"mutability":"Mut","span":55,"ty":27},{"mutability":"Not","span":56,"ty":28},{"mutability":"Not","span":57,"ty":8}],"span":60,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"f","source_info":{"scope":0,"span":56},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":null,"composite":null,"name":"result","source_info":{"scope":1,"span":58},"value":{"Place":{"local":0,"projection":[]}}},{"argument_index":1,"composite":null,"name":"dummy","source_info":{"scope":2,"span":59},"value":{"Const":{"const_":{"id":6,"kind":"ZeroSized","ty":8},"span":50,"user_ty":null}}}]}],"id":4,"name":"std::sys::backtrace::__rust_end_short_backtrace::<{closure@std::rt::begin_panic<&str>::{closure#0}}, !>"}},"symbol_name":"_ZN3std3sys9backtrace26__rust_end_short_backtrace17h4bae7cc86322177bE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"StorageLive":2},"span":2},{"kind":{"StorageLive":3},"span":2},{"kind":{"StorageLive":5},"span":2}],"terminator":{"kind":{"Call":{"args":[],"destination":{"local":2,"projection":[]},"func":{"Constant":{"const_":{"id":0,"kind":"ZeroSized","ty":0},"span":0,"user_ty":null}},"target":1,"unwind":"Unreachable"}},"span":1}},{"statements":[{"kind":{"StorageLive":4},"span":4},{"kind":{"Assign":[{"local":4,"projection":[]},{"BinaryOp":["Shr",{"Copy":{"local":2,"projection":[]}},{"Constant":{"const_":{"id":1,"kind":{"Allocated":{"align":4,"bytes":[64,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":1},"span":5,"user_ty":null}}]}]},"span":4},{"kind":{"Assign":[{"local":3,"projection":[]},{"Cast":["IntToInt",{"Move":{"local":4,"projection":[]}},2]}]},"span":6},{"kind":{"StorageDead":4},"span":7},{"kind":{"Assign":[{"local":5,"projection":[]},{"Cast":["IntToInt",{"Copy":{"local":2,"projection":[]}},2]}]},"span":8},{"kind":{"StorageLive":6},"span":9},{"kind":{"Assign":[{"local":6,"projection":[]},{"Aggregate":["Tuple",[{"Copy":{"local":3,"projection":[]}},{"Copy":{"local":5,"projection":[]}}]]}]},"span":9},{"kind":{"Assign":[{"local":0,"projection":[]},{"Aggregate":[{"Adt":[1,0,[],null,null]},[{"Move":{"local":6,"projection":[]}}]]}]},"span":10},{"kind":{"StorageDead":6},"span":11},{"kind":{"StorageDead":5},"span":2},{"kind":{"StorageDead":3},"span":2},{"kind":{"StorageDead":2},"span":2}],"terminator":{"kind":"Return","span":3}}],"locals":[{"mutability":"Mut","span":12,"ty":3},{"mutability":"Not","span":13,"ty":4},{"mutability":"Not","span":14,"ty":5},{"mutability":"Not","span":15,"ty":2},{"mutability":"Mut","span":4,"ty":5},{"mutability":"Not","span":16,"ty":2},{"mutability":"Mut","span":9,"ty":6}],"span":17,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":0,"span":13},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":null,"composite":null,"name":"t","source_info":{"scope":2,"span":14},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":null,"composite":null,"name":"t1","source_info":{"scope":3,"span":15},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":null,"composite":null,"name":"t2","source_info":{"scope":4,"span":16},"value":{"Place":{"local":5,"projection":[]}}}]}],"id":0,"name":"<&str as std::any::Any>::type_id"}},"symbol_name":"_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17h5fbaa8559e09a241E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":0,"blocks":[{"statements":[],"terminator":{"kind":{"Call":{"args":[{"Constant":{"const_":{"id":54,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,8]]}}},"ty":32},"span":418,"user_ty":null}}],"destination":{"local":1,"projection":[]},"func":{"Constant":{"const_":{"id":53,"kind":"ZeroSized","ty":112},"span":417,"user_ty":null}},"target":null,"unwind":"Continue"}},"span":419}}],"locals":[{"mutability":"Mut","span":420,"ty":8},{"mutability":"Mut","span":419,"ty":27}],"span":421,"spread_arg":null,"var_debug_info":[]}],"id":31,"name":"main"}},"symbol_name":"_ZN13panic_example4main17h1a3a8ec0839c9696E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"StorageLive":2},"span":35},{"kind":{"StorageLive":3},"span":34},{"kind":{"StorageLive":4},"span":36},{"kind":{"Assign":[{"local":4,"projection":[]},{"Use":{"Copy":{"local":1,"projection":["Deref",{"Field":[0,14]}]}}}]},"span":36}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":4,"projection":[]}}],"destination":{"local":3,"projection":[]},"func":{"Constant":{"const_":{"id":3,"kind":"ZeroSized","ty":20},"span":33,"user_ty":null}},"target":1,"unwind":"Continue"}},"span":34}},{"statements":[{"kind":{"StorageDead":4},"span":38}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":3,"projection":[]}}],"destination":{"local":2,"projection":[]},"func":{"Constant":{"const_":{"id":4,"kind":"ZeroSized","ty":21},"span":37,"user_ty":null}},"target":2,"unwind":"Continue"}},"span":35}},{"statements":[{"kind":{"StorageDead":3},"span":40},{"kind":{"StorageLive":5},"span":41},{"kind":{"Assign":[{"local":5,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":2,"projection":[{"Field":[0,22]}]}]}]},"span":41},{"kind":{"StorageLive":6},"span":42},{"kind":{"Assign":[{"local":6,"projection":[]},{"Use":{"Copy":{"local":2,"projection":[{"Field":[0,22]},{"Field":[0,16]}]}}}]},"span":42},{"kind":{"Assign":[{"local":0,"projection":[]},{"Cast":["IntToInt",{"Move":{"local":6,"projection":[]}},1]}]},"span":43},{"kind":{"StorageDead":6},"span":44},{"kind":{"StorageDead":5},"span":45},{"kind":{"StorageDead":2},"span":22}],"terminator":{"kind":"Return","span":39}}],"locals":[{"mutability":"Mut","span":46,"ty":1},{"mutability":"Mut","span":21,"ty":18},{"mutability":"Mut","span":35,"ty":23},{"mutability":"Mut","span":34,"ty":8},{"mutability":"Mut","span":36,"ty":14},{"mutability":"Mut","span":41,"ty":24},{"mutability":"Mut","span":42,"ty":16}],"span":21,"spread_arg":null,"var_debug_info":[{"argument_index":null,"composite":null,"name":"main","source_info":{"scope":0,"span":28},"value":{"Place":{"local":1,"projection":["Deref",{"Field":[0,14]}]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":1,"span":47},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":2,"span":48},"value":{"Place":{"local":5,"projection":[]}}}]}],"id":3,"name":"std::rt::lang_start::<()>::{closure#0}"}},"symbol_name":"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17hc407815e8e27866fE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":2,"blocks":[{"statements":[{"kind":{"StorageLive":8},"span":167},{"kind":{"Assign":[{"local":8,"projection":[]},{"Cast":["Transmute",{"Copy":{"local":2,"projection":[]}},65]}]},"span":168},{"kind":{"Assign":[{"local":3,"projection":[]},{"Aggregate":[{"Adt":[19,0,[],null,null]},[{"Copy":{"local":1,"projection":[]}},{"Move":{"local":8,"projection":[]}}]]}]},"span":169},{"kind":{"StorageDead":8},"span":170},{"kind":{"StorageLive":4},"span":171}],"terminator":{"kind":{"Call":{"args":[{"Constant":{"const_":{"id":30,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,5]]}}},"ty":64},"span":50,"user_ty":null}},{"Copy":{"local":3,"projection":[]}},{"Constant":{"const_":{"id":13,"kind":{"Allocated":{"align":1,"bytes":[0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":37},"span":165,"user_ty":null}}],"destination":{"local":4,"projection":[]},"func":{"Constant":{"const_":{"id":29,"kind":"ZeroSized","ty":63},"span":164,"user_ty":null}},"target":4,"unwind":"Continue"}},"span":166}},{"statements":[],"terminator":{"kind":"Unreachable","span":171}},{"statements":[],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":3,"projection":[]}}],"destination":{"local":7,"projection":[]},"func":{"Constant":{"const_":{"id":31,"kind":"ZeroSized","ty":66},"span":172,"user_ty":null}},"target":null,"unwind":"Continue"}},"span":173}},{"statements":[{"kind":{"Assign":[{"local":6,"projection":[]},{"Use":{"Copy":{"local":4,"projection":[{"Downcast":0},{"Field":[0,67]}]}}}]},"span":175},{"kind":{"StorageLive":10},"span":176},{"kind":{"StorageLive":11},"span":176},{"kind":{"StorageLive":9},"span":177},{"kind":{"Assign":[{"local":11,"projection":[]},{"Use":{"Copy":{"local":6,"projection":[{"Field":[0,68]}]}}}]},"span":178},{"kind":{"Assign":[{"local":10,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":11,"projection":[]}},46]}]},"span":179},{"kind":{"Assign":[{"local":9,"projection":[]},{"Aggregate":[{"Adt":[20,0,[{"Type":16}],null,null]},[{"Copy":{"local":10,"projection":[]}}]]}]},"span":180},{"kind":{"Assign":[{"local":0,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":11,"projection":[]}},61]}]},"span":181},{"kind":{"StorageDead":9},"span":182},{"kind":{"StorageDead":11},"span":176},{"kind":{"StorageDead":10},"span":176},{"kind":{"StorageDead":4},"span":183}],"terminator":{"kind":"Return","span":174}},{"statements":[{"kind":{"Assign":[{"local":5,"projection":[]},{"Discriminant":{"local":4,"projection":[]}}]},"span":171}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":5,"projection":[]}},"targets":{"branches":[[0,3],[1,2]],"otherwise":1}}},"span":184}}],"locals":[{"mutability":"Mut","span":185,"ty":61},{"mutability":"Not","span":186,"ty":47},{"mutability":"Not","span":187,"ty":47},{"mutability":"Not","span":188,"ty":69},{"mutability":"Mut","span":171,"ty":70},{"mutability":"Mut","span":189,"ty":13},{"mutability":"Not","span":175,"ty":67},{"mutability":"Mut","span":173,"ty":27},{"mutability":"Mut","span":167,"ty":65},{"mutability":"Mut","span":177,"ty":71},{"mutability":"Mut","span":179,"ty":46},{"mutability":"Mut","span":178,"ty":68}],"span":200,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"size","source_info":{"scope":0,"span":186},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":2,"composite":null,"name":"align","source_info":{"scope":0,"span":187},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":null,"composite":null,"name":"layout","source_info":{"scope":1,"span":188},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":null,"composite":null,"name":"ptr","source_info":{"scope":2,"span":175},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":1,"composite":null,"name":"size","source_info":{"scope":3,"span":190},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":2,"composite":null,"name":"align","source_info":{"scope":3,"span":191},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"align","source_info":{"scope":4,"span":192},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":5,"span":193},"value":{"Const":{"const_":{"id":32,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,6]]}}},"ty":64},"span":194,"user_ty":null}}},{"argument_index":2,"composite":null,"name":"layout","source_info":{"scope":5,"span":195},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":6,"span":196},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":7,"span":197},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":8,"span":198},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":9,"span":199},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":10,"span":199},"value":{"Place":{"local":9,"projection":[]}}}]},{"arg_count":0,"blocks":[{"statements":[{"kind":{"Assign":[{"local":1,"projection":[]},{"Aggregate":[{"Adt":[21,0,[],null,null]},[]]}]},"span":194},{"kind":{"Assign":[{"local":0,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":1,"projection":[]}]}]},"span":194}],"terminator":{"kind":"Return","span":194}}],"locals":[{"mutability":"Mut","span":194,"ty":64},{"mutability":"Mut","span":194,"ty":72}],"span":194,"spread_arg":null,"var_debug_info":[]}],"id":18,"name":"alloc::alloc::exchange_malloc"}},"symbol_name":"_ZN5alloc5alloc15exchange_malloc17h5443007c4b77064aE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"Assign":[{"local":2,"projection":[]},{"Discriminant":{"local":1,"projection":["Deref",{"Field":[0,41]}]}}]},"span":362}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":2,"projection":[]}},"targets":{"branches":[[0,2],[1,3]],"otherwise":1}}},"span":361}},{"statements":[],"terminator":{"kind":"Unreachable","span":362}},{"statements":[],"terminator":{"kind":{"Call":{"args":[],"destination":{"local":5,"projection":[]},"func":{"Constant":{"const_":{"id":48,"kind":"ZeroSized","ty":93},"span":363,"user_ty":null}},"target":null,"unwind":"Continue"}},"span":364}},{"statements":[{"kind":{"StorageLive":3},"span":366},{"kind":{"Assign":[{"local":3,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":1,"projection":["Deref",{"Field":[0,41]},{"Downcast":1},{"Field":[0,32]}]}]}]},"span":366},{"kind":{"StorageLive":4},"span":367},{"kind":{"Assign":[{"local":4,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":1,"projection":["Deref",{"Field":[0,41]},{"Downcast":1},{"Field":[0,32]}]}]}]},"span":367},{"kind":{"Assign":[{"local":0,"projection":[]},{"Cast":[{"PointerCoercion":"Unsize"},{"Move":{"local":4,"projection":[]}},100]}]},"span":367},{"kind":{"StorageDead":4},"span":367},{"kind":{"StorageDead":3},"span":367}],"terminator":{"kind":"Return","span":365}}],"locals":[{"mutability":"Mut","span":368,"ty":100},{"mutability":"Not","span":369,"ty":39},{"mutability":"Mut","span":370,"ty":13},{"mutability":"Not","span":366,"ty":4},{"mutability":"Mut","span":367,"ty":4},{"mutability":"Mut","span":364,"ty":27}],"span":371,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":0,"span":369},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":null,"composite":null,"name":"a","source_info":{"scope":1,"span":366},"value":{"Place":{"local":3,"projection":[]}}}]}],"id":28,"name":" as core::panic::PanicPayload>::get"}},"symbol_name":"_ZN91_$LT$std..panicking..begin_panic..Payload$LT$A$GT$$u20$as$u20$core..panic..PanicPayload$GT$3get17h7e5b46332dff10e9E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":1,"projection":[]}},{"Constant":{"const_":{"id":6,"kind":"ZeroSized","ty":8},"span":50,"user_ty":null}}],"destination":{"local":0,"projection":[]},"func":{"Constant":{"const_":{"id":8,"kind":"ZeroSized","ty":29},"span":61,"user_ty":null}},"target":1,"unwind":"Continue"}},"span":62}},{"statements":[],"terminator":{"kind":{"Call":{"args":[{"Constant":{"const_":{"id":6,"kind":"ZeroSized","ty":8},"span":50,"user_ty":null}}],"destination":{"local":2,"projection":[]},"func":{"Constant":{"const_":{"id":7,"kind":"ZeroSized","ty":26},"span":52,"user_ty":null}},"target":2,"unwind":"Unreachable"}},"span":53}},{"statements":[],"terminator":{"kind":"Return","span":63}}],"locals":[{"mutability":"Mut","span":64,"ty":8},{"mutability":"Not","span":65,"ty":14},{"mutability":"Not","span":66,"ty":8}],"span":68,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"f","source_info":{"scope":0,"span":65},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":null,"composite":null,"name":"result","source_info":{"scope":1,"span":67},"value":{"Place":{"local":0,"projection":[]}}},{"argument_index":1,"composite":null,"name":"dummy","source_info":{"scope":2,"span":59},"value":{"Const":{"const_":{"id":6,"kind":"ZeroSized","ty":8},"span":50,"user_ty":null}}}]}],"id":5,"name":"std::sys::backtrace::__rust_begin_short_backtrace::"}},"symbol_name":"_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h163f76a593f9a61dE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"Assign":[{"local":0,"projection":[]},{"Use":{"Constant":{"const_":{"id":27,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0,null,null,null,null,null,null,null,null],"mutability":"Not","provenance":{"ptrs":[]}}},"ty":41},"span":50,"user_ty":null}}}]},"span":155}],"terminator":{"kind":"Return","span":154}}],"locals":[{"mutability":"Mut","span":156,"ty":41},{"mutability":"Not","span":157,"ty":39}],"span":158,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":0,"span":157},"value":{"Place":{"local":1,"projection":[]}}}]}],"id":16,"name":" as core::panic::PanicPayload>::as_str"}},"symbol_name":"_ZN4core5panic12PanicPayload6as_str17h34f70170a81b2c4bE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":2,"blocks":[{"statements":[],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":1,"projection":["Deref"]}},{"Move":{"local":2,"projection":[]}}],"destination":{"local":0,"projection":[]},"func":{"Constant":{"const_":{"id":14,"kind":"ZeroSized","ty":42},"span":91,"user_ty":null}},"target":1,"unwind":"Continue"}},"span":91}},{"statements":[],"terminator":{"kind":"Return","span":91}}],"locals":[{"mutability":"Mut","span":91,"ty":1},{"mutability":"Not","span":91,"ty":43},{"mutability":"Not","span":91,"ty":8}],"span":91,"spread_arg":2,"var_debug_info":[]}],"id":11,"name":"<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once"}},"symbol_name":"_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h0b6b3134fd4818cdE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"StorageLive":3},"span":139},{"kind":{"Assign":[{"local":3,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":1,"projection":[]}},61]}]},"span":140},{"kind":{"StorageLive":4},"span":141},{"kind":{"Assign":[{"local":4,"projection":[]},{"Cast":["Transmute",{"Copy":{"local":1,"projection":[]}},47]}]},"span":142},{"kind":{"StorageDead":3},"span":139}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":4,"projection":[]}},"targets":{"branches":[[0,1]],"otherwise":2}}},"span":138}},{"statements":[{"kind":{"StorageDead":4},"span":138}],"terminator":{"kind":{"Call":{"args":[{"Constant":{"const_":{"id":26,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,4]]}}},"ty":32},"span":144,"user_ty":null}}],"destination":{"local":2,"projection":[]},"func":{"Constant":{"const_":{"id":16,"kind":"ZeroSized","ty":48},"span":143,"user_ty":null}},"target":null,"unwind":"Unreachable"}},"span":145}},{"statements":[{"kind":{"StorageDead":4},"span":138}],"terminator":{"kind":"Return","span":146}}],"locals":[{"mutability":"Mut","span":147,"ty":8},{"mutability":"Not","span":148,"ty":62},{"mutability":"Not","span":145,"ty":27},{"mutability":"Mut","span":140,"ty":61},{"mutability":"Mut","span":141,"ty":47}],"span":153,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":0,"span":148},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":1,"span":149},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":2,"span":150},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":3,"span":151},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":4,"span":152},"value":{"Place":{"local":3,"projection":[]}}}]}],"id":15,"name":"std::ptr::NonNull::::new_unchecked::precondition_check"}},"symbol_name":"_ZN4core3ptr8non_null16NonNull$LT$T$GT$13new_unchecked18precondition_check17h180abd43edd08785E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":2,"blocks":[{"statements":[{"kind":{"Assign":[{"local":3,"projection":[]},{"Discriminant":{"local":1,"projection":["Deref",{"Field":[0,41]}]}}]},"span":344}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":3,"projection":[]}},"targets":{"branches":[[0,2],[1,3]],"otherwise":1}}},"span":343}},{"statements":[],"terminator":{"kind":"Unreachable","span":344}},{"statements":[],"terminator":{"kind":{"Call":{"args":[],"destination":{"local":8,"projection":[]},"func":{"Constant":{"const_":{"id":48,"kind":"ZeroSized","ty":93},"span":345,"user_ty":null}},"target":null,"unwind":"Continue"}},"span":346}},{"statements":[{"kind":{"StorageLive":4},"span":349},{"kind":{"Assign":[{"local":4,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":1,"projection":["Deref",{"Field":[0,41]},{"Downcast":1},{"Field":[0,32]}]}]}]},"span":349},{"kind":{"StorageLive":6},"span":350},{"kind":{"StorageLive":7},"span":350},{"kind":{"Assign":[{"local":7,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":1,"projection":["Deref",{"Field":[0,41]},{"Downcast":1},{"Field":[0,32]}]}]}]},"span":350},{"kind":{"Assign":[{"local":6,"projection":[]},{"Cast":[{"PointerCoercion":"Unsize"},{"Move":{"local":7,"projection":[]}},95]}]},"span":350},{"kind":{"StorageDead":7},"span":350}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":6,"projection":[]}}],"destination":{"local":5,"projection":[]},"func":{"Constant":{"const_":{"id":49,"kind":"ZeroSized","ty":94},"span":347,"user_ty":null}},"target":4,"unwind":"Continue"}},"span":348}},{"statements":[{"kind":{"StorageDead":6},"span":353}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":2,"projection":[]}},{"Move":{"local":5,"projection":[]}}],"destination":{"local":0,"projection":[]},"func":{"Constant":{"const_":{"id":50,"kind":"ZeroSized","ty":96},"span":351,"user_ty":null}},"target":5,"unwind":"Continue"}},"span":352}},{"statements":[{"kind":{"StorageDead":4},"span":355}],"terminator":{"kind":"Return","span":354}}],"locals":[{"mutability":"Mut","span":356,"ty":97},{"mutability":"Not","span":357,"ty":98},{"mutability":"Not","span":358,"ty":99},{"mutability":"Mut","span":359,"ty":13},{"mutability":"Not","span":349,"ty":4},{"mutability":"Not","span":348,"ty":32},{"mutability":"Mut","span":350,"ty":95},{"mutability":"Mut","span":350,"ty":4},{"mutability":"Mut","span":346,"ty":27}],"span":360,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":0,"span":357},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":2,"composite":null,"name":"f","source_info":{"scope":0,"span":358},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":null,"composite":null,"name":"a","source_info":{"scope":1,"span":349},"value":{"Place":{"local":4,"projection":[]}}}]}],"id":27,"name":" as std::fmt::Display>::fmt"}},"symbol_name":"_ZN84_$LT$std..panicking..begin_panic..Payload$LT$A$GT$$u20$as$u20$core..fmt..Display$GT$3fmt17h2995801f2bca7f36E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"StorageLive":2},"span":82},{"kind":{"StorageLive":3},"span":82},{"kind":{"StorageLive":4},"span":83},{"kind":{"StorageLive":5},"span":84},{"kind":{"StorageLive":6},"span":85},{"kind":{"Assign":[{"local":6,"projection":[]},{"Use":{"Move":{"local":1,"projection":[{"Field":[0,32]}]}}}]},"span":85},{"kind":{"Assign":[{"local":5,"projection":[]},{"Aggregate":[{"Adt":[8,1,[{"Type":32}],null,null]},[{"Move":{"local":6,"projection":[]}}]]}]},"span":84},{"kind":{"StorageDead":6},"span":86},{"kind":{"Assign":[{"local":4,"projection":[]},{"Aggregate":[{"Adt":[9,0,[{"Type":32}],null,null]},[{"Move":{"local":5,"projection":[]}}]]}]},"span":83},{"kind":{"StorageDead":5},"span":87},{"kind":{"Assign":[{"local":3,"projection":[]},{"Ref":[{"kind":"ReErased"},{"Mut":{"kind":"Default"}},{"local":4,"projection":[]}]}]},"span":82},{"kind":{"Assign":[{"local":2,"projection":[]},{"Cast":[{"PointerCoercion":"Unsize"},{"Move":{"local":3,"projection":[]}},38]}]},"span":82},{"kind":{"StorageDead":3},"span":87},{"kind":{"Assign":[{"local":7,"projection":[]},{"Use":{"Copy":{"local":1,"projection":[{"Field":[1,35]}]}}}]},"span":88}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":2,"projection":[]}},{"Move":{"local":7,"projection":[]}},{"Constant":{"const_":{"id":12,"kind":{"Allocated":{"align":1,"bytes":[1],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":37},"span":79,"user_ty":null}},{"Constant":{"const_":{"id":13,"kind":{"Allocated":{"align":1,"bytes":[0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":37},"span":80,"user_ty":null}}],"destination":{"local":0,"projection":[]},"func":{"Constant":{"const_":{"id":11,"kind":"ZeroSized","ty":36},"span":78,"user_ty":null}},"target":null,"unwind":{"Cleanup":1}}},"span":81}},{"statements":[],"terminator":{"kind":{"Drop":{"place":{"local":4,"projection":[]},"target":2,"unwind":"Terminate"}},"span":89}},{"statements":[],"terminator":{"kind":"Resume","span":74}}],"locals":[{"mutability":"Mut","span":90,"ty":27},{"mutability":"Mut","span":74,"ty":28},{"mutability":"Mut","span":82,"ty":38},{"mutability":"Mut","span":82,"ty":39},{"mutability":"Mut","span":83,"ty":40},{"mutability":"Mut","span":84,"ty":41},{"mutability":"Mut","span":85,"ty":32},{"mutability":"Mut","span":74,"ty":35}],"span":74,"spread_arg":null,"var_debug_info":[{"argument_index":null,"composite":null,"name":"msg","source_info":{"scope":0,"span":76},"value":{"Place":{"local":1,"projection":[{"Field":[0,32]}]}}},{"argument_index":null,"composite":null,"name":"loc","source_info":{"scope":0,"span":71},"value":{"Place":{"local":1,"projection":[{"Field":[1,35]}]}}}]}],"id":7,"name":"std::rt::begin_panic::<&str>::{closure#0}"}},"symbol_name":"_ZN3std9panicking11begin_panic28_$u7b$$u7b$closure$u7d$$u7d$17h1ebb1eaab9f30b5aE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":3,"blocks":[{"statements":[{"kind":{"StorageLive":5},"span":239},{"kind":{"Assign":[{"local":5,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":2,"projection":[]}]}]},"span":239},{"kind":{"Assign":[{"local":4,"projection":[]},{"Use":{"Copy":{"local":2,"projection":[{"Field":[0,47]}]}}}]},"span":211},{"kind":{"StorageDead":5},"span":240}],"terminator":{"kind":{"SwitchInt":{"discr":{"Copy":{"local":4,"projection":[]}},"targets":{"branches":[[0,2]],"otherwise":1}}},"span":238}},{"statements":[{"kind":{"StorageLive":9},"span":242}],"terminator":{"kind":{"SwitchInt":{"discr":{"Copy":{"local":3,"projection":[]}},"targets":{"branches":[[0,4]],"otherwise":3}}},"span":241}},{"statements":[{"kind":{"StorageLive":6},"span":244},{"kind":{"StorageLive":7},"span":245},{"kind":{"StorageLive":8},"span":246},{"kind":{"Assign":[{"local":8,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":2,"projection":[]}]}]},"span":246},{"kind":{"StorageLive":18},"span":247},{"kind":{"StorageLive":19},"span":215},{"kind":{"Assign":[{"local":19,"projection":[]},{"Use":{"Copy":{"local":2,"projection":[{"Field":[1,65]}]}}}]},"span":215},{"kind":{"StorageLive":21},"span":216},{"kind":{"StorageLive":22},"span":216},{"kind":{"StorageLive":23},"span":216},{"kind":{"StorageLive":24},"span":216},{"kind":{"StorageLive":20},"span":217},{"kind":{"Assign":[{"local":20,"projection":[]},{"Use":{"Copy":{"local":19,"projection":[{"Field":[0,74]}]}}}]},"span":217},{"kind":{"Assign":[{"local":21,"projection":[]},{"Discriminant":{"local":20,"projection":[]}}]},"span":218},{"kind":{"Assign":[{"local":22,"projection":[]},{"BinaryOp":["Ge",{"Copy":{"local":21,"projection":[]}},{"Constant":{"const_":{"id":34,"kind":{"Allocated":{"align":8,"bytes":[1,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":2},"span":218,"user_ty":null}}]}]},"span":218},{"kind":{"Assign":[{"local":23,"projection":[]},{"BinaryOp":["Le",{"Copy":{"local":21,"projection":[]}},{"Constant":{"const_":{"id":35,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,128],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":2},"span":218,"user_ty":null}}]}]},"span":218},{"kind":{"Assign":[{"local":24,"projection":[]},{"BinaryOp":["BitAnd",{"Move":{"local":22,"projection":[]}},{"Move":{"local":23,"projection":[]}}]}]},"span":218},{"kind":{"Intrinsic":{"Assume":{"Move":{"local":24,"projection":[]}}}},"span":218},{"kind":{"Assign":[{"local":18,"projection":[]},{"Cast":["IntToInt",{"Copy":{"local":21,"projection":[]}},47]}]},"span":218},{"kind":{"StorageDead":20},"span":219},{"kind":{"StorageDead":24},"span":216},{"kind":{"StorageDead":23},"span":216},{"kind":{"StorageDead":22},"span":216},{"kind":{"StorageDead":21},"span":216},{"kind":{"StorageDead":19},"span":220},{"kind":{"Assign":[{"local":17,"projection":[]},{"Cast":["Transmute",{"Copy":{"local":18,"projection":[]}},61]}]},"span":248},{"kind":{"StorageDead":18},"span":249},{"kind":{"Assign":[{"local":25,"projection":[]},{"NullaryOp":["UbChecks",37]}]},"span":203}],"terminator":{"kind":{"SwitchInt":{"discr":{"Copy":{"local":25,"projection":[]}},"targets":{"branches":[[0,9]],"otherwise":7}}},"span":243}},{"statements":[{"kind":{"StorageLive":10},"span":252},{"kind":{"Assign":[{"local":10,"projection":[]},{"Use":{"Copy":{"local":2,"projection":[]}}}]},"span":252},{"kind":{"StorageLive":34},"span":253},{"kind":{"Assign":[{"local":34,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":10,"projection":[]}]}]},"span":253},{"kind":{"StorageDead":34},"span":254},{"kind":{"StorageLive":35},"span":255},{"kind":{"StorageLive":36},"span":256},{"kind":{"Assign":[{"local":36,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":10,"projection":[]}]}]},"span":256},{"kind":{"StorageLive":37},"span":215},{"kind":{"Assign":[{"local":37,"projection":[]},{"Use":{"Copy":{"local":2,"projection":[{"Field":[1,65]}]}}}]},"span":215},{"kind":{"StorageLive":39},"span":216},{"kind":{"StorageLive":40},"span":216},{"kind":{"StorageLive":41},"span":216},{"kind":{"StorageLive":42},"span":216},{"kind":{"StorageLive":38},"span":217},{"kind":{"Assign":[{"local":38,"projection":[]},{"Use":{"Copy":{"local":37,"projection":[{"Field":[0,74]}]}}}]},"span":217},{"kind":{"Assign":[{"local":39,"projection":[]},{"Discriminant":{"local":38,"projection":[]}}]},"span":218},{"kind":{"Assign":[{"local":40,"projection":[]},{"BinaryOp":["Ge",{"Copy":{"local":39,"projection":[]}},{"Constant":{"const_":{"id":34,"kind":{"Allocated":{"align":8,"bytes":[1,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":2},"span":218,"user_ty":null}}]}]},"span":218},{"kind":{"Assign":[{"local":41,"projection":[]},{"BinaryOp":["Le",{"Copy":{"local":39,"projection":[]}},{"Constant":{"const_":{"id":35,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,128],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":2},"span":218,"user_ty":null}}]}]},"span":218},{"kind":{"Assign":[{"local":42,"projection":[]},{"BinaryOp":["BitAnd",{"Move":{"local":40,"projection":[]}},{"Move":{"local":41,"projection":[]}}]}]},"span":218},{"kind":{"Intrinsic":{"Assume":{"Move":{"local":42,"projection":[]}}}},"span":218},{"kind":{"Assign":[{"local":35,"projection":[]},{"Cast":["IntToInt",{"Copy":{"local":39,"projection":[]}},47]}]},"span":218},{"kind":{"StorageDead":38},"span":219},{"kind":{"StorageDead":42},"span":216},{"kind":{"StorageDead":41},"span":216},{"kind":{"StorageDead":40},"span":216},{"kind":{"StorageDead":39},"span":216},{"kind":{"StorageDead":37},"span":220},{"kind":{"StorageDead":36},"span":257}],"terminator":{"kind":{"Call":{"args":[{"Copy":{"local":4,"projection":[]}},{"Move":{"local":35,"projection":[]}}],"destination":{"local":9,"projection":[]},"func":{"Constant":{"const_":{"id":39,"kind":"ZeroSized","ty":78},"span":250,"user_ty":null}},"target":13,"unwind":"Unreachable"}},"span":251}},{"statements":[],"terminator":{"kind":{"Call":{"args":[{"Copy":{"local":2,"projection":[]}}],"destination":{"local":9,"projection":[]},"func":{"Constant":{"const_":{"id":40,"kind":"ZeroSized","ty":79},"span":258,"user_ty":null}},"target":5,"unwind":"Continue"}},"span":259}},{"statements":[{"kind":{"StorageLive":11},"span":261},{"kind":{"StorageLive":12},"span":262},{"kind":{"StorageLive":13},"span":263},{"kind":{"Assign":[{"local":14,"projection":[]},{"Use":{"Copy":{"local":9,"projection":[]}}}]},"span":264},{"kind":{"StorageLive":44},"span":141},{"kind":{"Assign":[{"local":44,"projection":[]},{"Cast":["Transmute",{"Copy":{"local":14,"projection":[]}},47]}]},"span":142}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":44,"projection":[]}},"targets":{"branches":[[0,14]],"otherwise":15}}},"span":260}},{"statements":[],"terminator":{"kind":"Return","span":265}},{"statements":[{"kind":{"StorageLive":27},"span":268},{"kind":{"Assign":[{"local":27,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":17,"projection":[]}},62]}]},"span":268}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":27,"projection":[]}}],"destination":{"local":26,"projection":[]},"func":{"Constant":{"const_":{"id":41,"kind":"ZeroSized","ty":80},"span":266,"user_ty":null}},"target":8,"unwind":"Unreachable"}},"span":267}},{"statements":[{"kind":{"StorageDead":27},"span":269},{"kind":{"Assign":[{"local":28,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":17,"projection":[]}},46]}]},"span":270},{"kind":{"Assign":[{"local":7,"projection":[]},{"Aggregate":[{"Adt":[20,0,[{"Type":16}],null,null]},[{"Copy":{"local":28,"projection":[]}}]]}]},"span":271},{"kind":{"StorageDead":8},"span":272},{"kind":{"StorageLive":29},"span":273},{"kind":{"StorageLive":30},"span":274},{"kind":{"Assign":[{"local":30,"projection":[]},{"Use":{"Copy":{"local":17,"projection":[]}}}]},"span":181},{"kind":{"Assign":[{"local":29,"projection":[]},{"Aggregate":[{"RawPtr":[81,"Mut"]},[{"Copy":{"local":17,"projection":[]}},{"Constant":{"const_":{"id":20,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":47},"span":50,"user_ty":null}}]]}]},"span":275},{"kind":{"StorageDead":30},"span":276},{"kind":{"StorageLive":33},"span":277}],"terminator":{"kind":{"Goto":{"target":10}},"span":243}},{"statements":[{"kind":{"Assign":[{"local":28,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":17,"projection":[]}},46]}]},"span":270},{"kind":{"Assign":[{"local":7,"projection":[]},{"Aggregate":[{"Adt":[20,0,[{"Type":16}],null,null]},[{"Copy":{"local":28,"projection":[]}}]]}]},"span":271},{"kind":{"StorageDead":8},"span":272},{"kind":{"StorageLive":29},"span":273},{"kind":{"StorageLive":30},"span":274},{"kind":{"Assign":[{"local":30,"projection":[]},{"Use":{"Copy":{"local":17,"projection":[]}}}]},"span":181},{"kind":{"Assign":[{"local":29,"projection":[]},{"Aggregate":[{"RawPtr":[81,"Mut"]},[{"Copy":{"local":17,"projection":[]}},{"Constant":{"const_":{"id":20,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":47},"span":50,"user_ty":null}}]]}]},"span":275},{"kind":{"StorageDead":30},"span":276},{"kind":{"StorageLive":33},"span":277}],"terminator":{"kind":{"SwitchInt":{"discr":{"Copy":{"local":25,"projection":[]}},"targets":{"branches":[[0,12]],"otherwise":10}}},"span":243}},{"statements":[{"kind":{"StorageLive":32},"span":268},{"kind":{"Assign":[{"local":32,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":17,"projection":[]}},62]}]},"span":268}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":32,"projection":[]}}],"destination":{"local":31,"projection":[]},"func":{"Constant":{"const_":{"id":41,"kind":"ZeroSized","ty":80},"span":266,"user_ty":null}},"target":11,"unwind":"Unreachable"}},"span":267}},{"statements":[{"kind":{"StorageDead":32},"span":269}],"terminator":{"kind":{"Goto":{"target":12}},"span":278}},{"statements":[{"kind":{"Assign":[{"local":33,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":29,"projection":[]}},68]}]},"span":270},{"kind":{"Assign":[{"local":6,"projection":[]},{"Aggregate":[{"Adt":[20,0,[{"Type":81}],null,null]},[{"Copy":{"local":33,"projection":[]}}]]}]},"span":271},{"kind":{"StorageDead":33},"span":277},{"kind":{"StorageDead":29},"span":280},{"kind":{"StorageDead":7},"span":281},{"kind":{"Assign":[{"local":0,"projection":[]},{"Aggregate":[{"Adt":[24,0,[{"Type":67},{"Type":82}],null,null]},[{"Move":{"local":6,"projection":[]}}]]}]},"span":282},{"kind":{"StorageDead":6},"span":279}],"terminator":{"kind":{"Goto":{"target":6}},"span":279}},{"statements":[{"kind":{"StorageDead":35},"span":284},{"kind":{"StorageDead":10},"span":285}],"terminator":{"kind":{"Goto":{"target":5}},"span":283}},{"statements":[{"kind":{"StorageDead":44},"span":260},{"kind":{"Assign":[{"local":13,"projection":[]},{"Use":{"Constant":{"const_":{"id":42,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":83},"span":50,"user_ty":null}}}]},"span":286},{"kind":{"StorageLive":49},"span":287},{"kind":{"Assign":[{"local":12,"projection":[]},{"Use":{"Constant":{"const_":{"id":43,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":84},"span":50,"user_ty":null}}}]},"span":288},{"kind":{"StorageDead":49},"span":287},{"kind":{"StorageDead":13},"span":289},{"kind":{"StorageLive":50},"span":261},{"kind":{"StorageDead":50},"span":261},{"kind":{"StorageDead":12},"span":290},{"kind":{"Assign":[{"local":0,"projection":[]},{"Use":{"Constant":{"const_":{"id":44,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0,null,null,null,null,null,null,null,null],"mutability":"Not","provenance":{"ptrs":[]}}},"ty":70},"span":50,"user_ty":null}}}]},"span":291},{"kind":{"StorageDead":11},"span":292},{"kind":{"StorageDead":9},"span":293}],"terminator":{"kind":{"Goto":{"target":6}},"span":265}},{"statements":[{"kind":{"StorageDead":44},"span":260},{"kind":{"StorageLive":43},"span":294},{"kind":{"StorageLive":48},"span":295},{"kind":{"StorageLive":45},"span":243},{"kind":{"Assign":[{"local":45,"projection":[]},{"NullaryOp":["UbChecks",37]}]},"span":203}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":45,"projection":[]}},"targets":{"branches":[[0,18]],"otherwise":16}}},"span":243}},{"statements":[{"kind":{"StorageLive":47},"span":268},{"kind":{"Assign":[{"local":47,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":14,"projection":[]}},62]}]},"span":268}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":47,"projection":[]}}],"destination":{"local":46,"projection":[]},"func":{"Constant":{"const_":{"id":41,"kind":"ZeroSized","ty":80},"span":266,"user_ty":null}},"target":17,"unwind":"Unreachable"}},"span":267}},{"statements":[{"kind":{"StorageDead":47},"span":269}],"terminator":{"kind":{"Goto":{"target":18}},"span":278}},{"statements":[{"kind":{"StorageDead":45},"span":296},{"kind":{"Assign":[{"local":48,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":14,"projection":[]}},46]}]},"span":270},{"kind":{"Assign":[{"local":43,"projection":[]},{"Aggregate":[{"Adt":[20,0,[{"Type":16}],null,null]},[{"Copy":{"local":48,"projection":[]}}]]}]},"span":271},{"kind":{"StorageDead":48},"span":295},{"kind":{"Assign":[{"local":13,"projection":[]},{"Aggregate":[{"Adt":[8,1,[{"Type":71}],null,null]},[{"Move":{"local":43,"projection":[]}}]]}]},"span":297},{"kind":{"StorageDead":43},"span":298},{"kind":{"StorageLive":49},"span":287},{"kind":{"Assign":[{"local":49,"projection":[]},{"Use":{"Move":{"local":13,"projection":[{"Downcast":1},{"Field":[0,71]}]}}}]},"span":299},{"kind":{"Assign":[{"local":12,"projection":[]},{"Aggregate":[{"Adt":[24,0,[{"Type":71},{"Type":82}],null,null]},[{"Copy":{"local":49,"projection":[]}}]]}]},"span":300},{"kind":{"StorageDead":49},"span":287},{"kind":{"StorageDead":13},"span":289},{"kind":{"StorageLive":50},"span":261},{"kind":{"Assign":[{"local":50,"projection":[]},{"Use":{"Move":{"local":12,"projection":[{"Downcast":0},{"Field":[0,71]}]}}}]},"span":301},{"kind":{"Assign":[{"local":11,"projection":[]},{"Aggregate":[{"Adt":[25,0,[{"Type":85},{"Type":71}],null,null]},[{"Copy":{"local":50,"projection":[]}}]]}]},"span":302},{"kind":{"StorageDead":50},"span":261},{"kind":{"StorageDead":12},"span":290},{"kind":{"Assign":[{"local":15,"projection":[]},{"Use":{"Copy":{"local":11,"projection":[{"Downcast":0},{"Field":[0,71]}]}}}]},"span":303},{"kind":{"StorageDead":11},"span":292},{"kind":{"StorageLive":16},"span":304},{"kind":{"StorageLive":53},"span":304},{"kind":{"StorageLive":51},"span":273},{"kind":{"StorageLive":52},"span":274},{"kind":{"Assign":[{"local":53,"projection":[]},{"Use":{"Copy":{"local":15,"projection":[{"Field":[0,46]}]}}}]},"span":178},{"kind":{"Assign":[{"local":52,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":53,"projection":[]}},61]}]},"span":181},{"kind":{"Assign":[{"local":51,"projection":[]},{"Aggregate":[{"RawPtr":[81,"Mut"]},[{"Copy":{"local":52,"projection":[]}},{"Copy":{"local":4,"projection":[]}}]]}]},"span":275},{"kind":{"StorageDead":52},"span":276},{"kind":{"StorageLive":57},"span":277},{"kind":{"StorageLive":54},"span":243},{"kind":{"Assign":[{"local":54,"projection":[]},{"NullaryOp":["UbChecks",37]}]},"span":203}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":54,"projection":[]}},"targets":{"branches":[[0,21]],"otherwise":19}}},"span":243}},{"statements":[{"kind":{"StorageLive":56},"span":268},{"kind":{"Assign":[{"local":56,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":53,"projection":[]}},62]}]},"span":268}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":56,"projection":[]}}],"destination":{"local":55,"projection":[]},"func":{"Constant":{"const_":{"id":41,"kind":"ZeroSized","ty":80},"span":266,"user_ty":null}},"target":20,"unwind":"Unreachable"}},"span":267}},{"statements":[{"kind":{"StorageDead":56},"span":269}],"terminator":{"kind":{"Goto":{"target":21}},"span":278}},{"statements":[{"kind":{"StorageDead":54},"span":296},{"kind":{"Assign":[{"local":57,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":51,"projection":[]}},68]}]},"span":270},{"kind":{"Assign":[{"local":16,"projection":[]},{"Aggregate":[{"Adt":[20,0,[{"Type":81}],null,null]},[{"Copy":{"local":57,"projection":[]}}]]}]},"span":271},{"kind":{"StorageDead":57},"span":277},{"kind":{"StorageDead":51},"span":280},{"kind":{"StorageDead":53},"span":304},{"kind":{"Assign":[{"local":0,"projection":[]},{"Aggregate":[{"Adt":[24,0,[{"Type":67},{"Type":82}],null,null]},[{"Move":{"local":16,"projection":[]}}]]}]},"span":305},{"kind":{"StorageDead":16},"span":306},{"kind":{"StorageDead":9},"span":293}],"terminator":{"kind":{"Goto":{"target":6}},"span":293}}],"locals":[{"mutability":"Mut","span":307,"ty":70},{"mutability":"Not","span":308,"ty":64},{"mutability":"Not","span":309,"ty":69},{"mutability":"Not","span":310,"ty":37},{"mutability":"Mut","span":311,"ty":47},{"mutability":"Mut","span":239,"ty":77},{"mutability":"Mut","span":244,"ty":67},{"mutability":"Mut","span":245,"ty":71},{"mutability":"Mut","span":246,"ty":77},{"mutability":"Not","span":242,"ty":61},{"mutability":"Mut","span":252,"ty":69},{"mutability":"Mut","span":261,"ty":86},{"mutability":"Mut","span":262,"ty":84},{"mutability":"Mut","span":263,"ty":83},{"mutability":"Mut","span":264,"ty":61},{"mutability":"Not","span":303,"ty":71},{"mutability":"Mut","span":304,"ty":67},{"mutability":"Mut","span":312,"ty":61},{"mutability":"Mut","span":247,"ty":47},{"mutability":"Mut","span":215,"ty":65},{"mutability":"Not","span":217,"ty":74},{"mutability":"Mut","span":217,"ty":2},{"mutability":"Mut","span":218,"ty":37},{"mutability":"Mut","span":218,"ty":37},{"mutability":"Mut","span":218,"ty":37},{"mutability":"Mut","span":243,"ty":37},{"mutability":"Not","span":267,"ty":8},{"mutability":"Mut","span":268,"ty":62},{"mutability":"Mut","span":270,"ty":46},{"mutability":"Mut","span":273,"ty":87},{"mutability":"Mut","span":274,"ty":61},{"mutability":"Not","span":267,"ty":8},{"mutability":"Mut","span":268,"ty":62},{"mutability":"Mut","span":270,"ty":68},{"mutability":"Mut","span":253,"ty":77},{"mutability":"Mut","span":255,"ty":47},{"mutability":"Mut","span":256,"ty":77},{"mutability":"Mut","span":215,"ty":65},{"mutability":"Not","span":217,"ty":74},{"mutability":"Mut","span":217,"ty":2},{"mutability":"Mut","span":218,"ty":37},{"mutability":"Mut","span":218,"ty":37},{"mutability":"Mut","span":218,"ty":37},{"mutability":"Mut","span":294,"ty":71},{"mutability":"Mut","span":141,"ty":47},{"mutability":"Mut","span":243,"ty":37},{"mutability":"Not","span":267,"ty":8},{"mutability":"Mut","span":268,"ty":62},{"mutability":"Mut","span":270,"ty":46},{"mutability":"Not","span":299,"ty":71},{"mutability":"Not","span":301,"ty":71},{"mutability":"Mut","span":273,"ty":87},{"mutability":"Mut","span":274,"ty":61},{"mutability":"Mut","span":178,"ty":46},{"mutability":"Mut","span":243,"ty":37},{"mutability":"Not","span":267,"ty":8},{"mutability":"Mut","span":268,"ty":62},{"mutability":"Mut","span":270,"ty":68}],"span":335,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":0,"span":308},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":2,"composite":null,"name":"layout","source_info":{"scope":0,"span":309},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":3,"composite":null,"name":"zeroed","source_info":{"scope":0,"span":310},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":null,"composite":null,"name":"size","source_info":{"scope":1,"span":313},"value":{"Place":{"local":4,"projection":[]}}},{"argument_index":null,"composite":null,"name":"raw_ptr","source_info":{"scope":2,"span":242},"value":{"Place":{"local":9,"projection":[]}}},{"argument_index":null,"composite":null,"name":"ptr","source_info":{"scope":3,"span":314},"value":{"Place":{"local":15,"projection":[]}}},{"argument_index":null,"composite":null,"name":"residual","source_info":{"scope":4,"span":315},"value":{"Const":{"const_":{"id":45,"kind":"ZeroSized","ty":85},"span":50,"user_ty":null}}},{"argument_index":null,"composite":null,"name":"val","source_info":{"scope":6,"span":303},"value":{"Place":{"local":15,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":8,"span":234},"value":{"Place":{"local":5,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":9,"span":316},"value":{"Place":{"local":8,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":10,"span":235},"value":{"Place":{"local":8,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":11,"span":236},"value":{"Place":{"local":19,"projection":[]}}},{"argument_index":1,"composite":null,"name":"addr","source_info":{"scope":12,"span":317},"value":{"Place":{"local":18,"projection":[]}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":13,"span":318},"value":{"Place":{"local":17,"projection":[]}}},{"argument_index":1,"composite":null,"name":"data","source_info":{"scope":16,"span":319},"value":{"Place":{"local":7,"projection":[]}}},{"argument_index":2,"composite":null,"name":"len","source_info":{"scope":16,"span":320},"value":{"Const":{"const_":{"id":20,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":47},"span":321,"user_ty":null}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":17,"span":199},"value":{"Place":{"local":7,"projection":[]}}},{"argument_index":1,"composite":null,"name":"data","source_info":{"scope":18,"span":322},"value":{"Place":{"local":30,"projection":[]}}},{"argument_index":2,"composite":null,"name":"len","source_info":{"scope":18,"span":323},"value":{"Const":{"const_":{"id":20,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":47},"span":321,"user_ty":null}}},{"argument_index":1,"composite":null,"name":"data_pointer","source_info":{"scope":19,"span":324},"value":{"Place":{"local":30,"projection":[]}}},{"argument_index":2,"composite":null,"name":"metadata","source_info":{"scope":19,"span":325},"value":{"Const":{"const_":{"id":20,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":47},"span":321,"user_ty":null}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":20,"span":318},"value":{"Place":{"local":29,"projection":[]}}},{"argument_index":1,"composite":null,"name":"layout","source_info":{"scope":23,"span":326},"value":{"Place":{"local":10,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":24,"span":234},"value":{"Place":{"local":34,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":25,"span":235},"value":{"Place":{"local":36,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":26,"span":236},"value":{"Place":{"local":37,"projection":[]}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":27,"span":327},"value":{"Place":{"local":14,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":28,"span":149},"value":{"Place":{"local":14,"projection":[]}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":29,"span":150},"value":{"Place":{"local":14,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":30,"span":151},"value":{"Place":{"local":14,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":31,"span":152},"value":{"Place":{"local":14,"projection":[]}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":32,"span":318},"value":{"Place":{"local":14,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":35,"span":328},"value":{"Place":{"local":13,"projection":[]}}},{"argument_index":2,"composite":null,"name":"err","source_info":{"scope":35,"span":329},"value":{"Const":{"const_":{"id":46,"kind":"ZeroSized","ty":82},"span":50,"user_ty":null}}},{"argument_index":null,"composite":null,"name":"v","source_info":{"scope":36,"span":299},"value":{"Place":{"local":49,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":37,"span":330},"value":{"Place":{"local":12,"projection":[]}}},{"argument_index":null,"composite":null,"name":"v","source_info":{"scope":38,"span":301},"value":{"Place":{"local":50,"projection":[]}}},{"argument_index":null,"composite":null,"name":"e","source_info":{"scope":39,"span":331},"value":{"Const":{"const_":{"id":46,"kind":"ZeroSized","ty":82},"span":50,"user_ty":null}}},{"argument_index":1,"composite":null,"name":"data","source_info":{"scope":40,"span":319},"value":{"Place":{"local":15,"projection":[]}}},{"argument_index":2,"composite":null,"name":"len","source_info":{"scope":40,"span":320},"value":{"Place":{"local":4,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":41,"span":199},"value":{"Place":{"local":15,"projection":[]}}},{"argument_index":1,"composite":null,"name":"data","source_info":{"scope":42,"span":322},"value":{"Place":{"local":52,"projection":[]}}},{"argument_index":2,"composite":null,"name":"len","source_info":{"scope":42,"span":323},"value":{"Place":{"local":4,"projection":[]}}},{"argument_index":1,"composite":null,"name":"data_pointer","source_info":{"scope":43,"span":324},"value":{"Place":{"local":52,"projection":[]}}},{"argument_index":2,"composite":null,"name":"metadata","source_info":{"scope":43,"span":325},"value":{"Place":{"local":4,"projection":[]}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":44,"span":318},"value":{"Place":{"local":51,"projection":[]}}},{"argument_index":1,"composite":null,"name":"residual","source_info":{"scope":47,"span":332},"value":{"Const":{"const_":{"id":45,"kind":"ZeroSized","ty":85},"span":50,"user_ty":null}}},{"argument_index":null,"composite":null,"name":"e","source_info":{"scope":48,"span":333},"value":{"Const":{"const_":{"id":46,"kind":"ZeroSized","ty":82},"span":50,"user_ty":null}}},{"argument_index":1,"composite":null,"name":"t","source_info":{"scope":49,"span":334},"value":{"Const":{"const_":{"id":46,"kind":"ZeroSized","ty":82},"span":50,"user_ty":null}}}]}],"id":23,"name":"std::alloc::Global::alloc_impl"}},"symbol_name":"_ZN5alloc5alloc6Global10alloc_impl17hfeb4b7829cd89493E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"StorageLive":2},"span":71}],"terminator":{"kind":{"Call":{"args":[],"destination":{"local":2,"projection":[]},"func":{"Constant":{"const_":{"id":9,"kind":"ZeroSized","ty":30},"span":69,"user_ty":null}},"target":1,"unwind":"Unreachable"}},"span":70}},{"statements":[{"kind":{"StorageLive":3},"span":74},{"kind":{"Assign":[{"local":3,"projection":[]},{"Aggregate":[{"Closure":[7,[{"Type":32},{"Type":1},{"Type":33},{"Type":34}]]},[{"Move":{"local":1,"projection":[]}},{"Copy":{"local":2,"projection":[]}}]]}]},"span":74}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":3,"projection":[]}}],"destination":{"local":0,"projection":[]},"func":{"Constant":{"const_":{"id":10,"kind":"ZeroSized","ty":31},"span":72,"user_ty":null}},"target":null,"unwind":"Continue"}},"span":73}}],"locals":[{"mutability":"Mut","span":75,"ty":27},{"mutability":"Not","span":76,"ty":32},{"mutability":"Not","span":71,"ty":35},{"mutability":"Mut","span":74,"ty":28}],"span":77,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"msg","source_info":{"scope":0,"span":76},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":null,"composite":null,"name":"loc","source_info":{"scope":1,"span":71},"value":{"Place":{"local":2,"projection":[]}}}]}],"id":6,"name":"std::rt::begin_panic::<&str>"}},"symbol_name":"_ZN3std9panicking11begin_panic17h046658c3c0b9185bE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"StorageLive":2},"span":373},{"kind":{"StorageLive":3},"span":374},{"kind":{"Assign":[{"local":3,"projection":[]},{"Ref":[{"kind":"ReErased"},{"Mut":{"kind":"TwoPhaseBorrow"}},{"local":1,"projection":["Deref",{"Field":[0,41]}]}]}]},"span":374},{"kind":{"Assign":[{"local":9,"projection":[]},{"Aggregate":[{"Adt":[8,0,[{"Type":32}],null,null]},[]]}]},"span":375},{"kind":{"Assign":[{"local":2,"projection":[]},{"Use":{"Copy":{"local":1,"projection":["Deref",{"Field":[0,41]}]}}}]},"span":376},{"kind":{"Assign":[{"local":1,"projection":["Deref",{"Field":[0,41]}]},{"Use":{"Copy":{"local":9,"projection":[]}}}]},"span":377},{"kind":{"StorageDead":3},"span":378},{"kind":{"Assign":[{"local":4,"projection":[]},{"Discriminant":{"local":2,"projection":[]}}]},"span":373}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":4,"projection":[]}},"targets":{"branches":[[0,2],[1,3]],"otherwise":1}}},"span":372}},{"statements":[],"terminator":{"kind":"Unreachable","span":373}},{"statements":[],"terminator":{"kind":{"Call":{"args":[],"destination":{"local":8,"projection":[]},"func":{"Constant":{"const_":{"id":48,"kind":"ZeroSized","ty":93},"span":379,"user_ty":null}},"target":null,"unwind":"Continue"}},"span":380}},{"statements":[{"kind":{"Assign":[{"local":5,"projection":[]},{"Use":{"Move":{"local":2,"projection":[{"Downcast":1},{"Field":[0,32]}]}}}]},"span":383},{"kind":{"StorageLive":7},"span":382}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":5,"projection":[]}}],"destination":{"local":7,"projection":[]},"func":{"Constant":{"const_":{"id":51,"kind":"ZeroSized","ty":101},"span":381,"user_ty":0}},"target":4,"unwind":"Continue"}},"span":382}},{"statements":[{"kind":{"Assign":[{"local":6,"projection":[]},{"Cast":[{"PointerCoercion":"Unsize"},{"Move":{"local":7,"projection":[]}},102]}]},"span":382},{"kind":{"StorageDead":7},"span":385},{"kind":{"StorageDead":2},"span":386},{"kind":{"StorageLive":11},"span":387},{"kind":{"StorageLive":15},"span":387},{"kind":{"StorageLive":14},"span":387},{"kind":{"StorageLive":10},"span":388},{"kind":{"Assign":[{"local":10,"projection":[]},{"Aggregate":[{"Adt":[30,0,[{"Type":102}],null,null]},[{"Copy":{"local":6,"projection":[]}}]]}]},"span":389},{"kind":{"Assign":[{"local":11,"projection":[]},{"Ref":[{"kind":"ReErased"},{"Mut":{"kind":"Default"}},{"local":10,"projection":[]}]}]},"span":390},{"kind":{"Assign":[{"local":15,"projection":[]},{"Use":{"Copy":{"local":10,"projection":[{"Field":[0,102]},{"Field":[0,103]},{"Field":[0,104]}]}}}]},"span":391},{"kind":{"Assign":[{"local":14,"projection":[]},{"Use":{"Copy":{"local":15,"projection":[{"Field":[0,105]}]}}}]},"span":391},{"kind":{"Assign":[{"local":0,"projection":[]},{"AddressOf":["Mut",{"local":14,"projection":["Deref"]}]}]},"span":391},{"kind":{"StorageLive":12},"span":392},{"kind":{"StorageLive":13},"span":393},{"kind":{"Assign":[{"local":13,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":10,"projection":[]}]}]},"span":393},{"kind":{"StorageDead":13},"span":393},{"kind":{"Assign":[{"local":12,"projection":[]},{"AddressOf":["Not",{"local":10,"projection":[{"Field":[0,102]},{"Field":[1,72]}]}]}]},"span":392},{"kind":{"StorageDead":12},"span":394},{"kind":{"StorageDead":10},"span":395},{"kind":{"StorageDead":14},"span":387},{"kind":{"StorageDead":15},"span":387},{"kind":{"StorageDead":11},"span":387}],"terminator":{"kind":"Return","span":384}}],"locals":[{"mutability":"Mut","span":396,"ty":106},{"mutability":"Not","span":397,"ty":39},{"mutability":"Mut","span":373,"ty":41},{"mutability":"Mut","span":374,"ty":107},{"mutability":"Mut","span":398,"ty":13},{"mutability":"Not","span":383,"ty":32},{"mutability":"Mut","span":399,"ty":102},{"mutability":"Mut","span":382,"ty":92},{"mutability":"Mut","span":380,"ty":27},{"mutability":"Mut","span":375,"ty":41},{"mutability":"Mut","span":388,"ty":108},{"mutability":"Mut","span":390,"ty":109},{"mutability":"Mut","span":392,"ty":110},{"mutability":"Mut","span":393,"ty":111},{"mutability":"Mut","span":400,"ty":105},{"mutability":"Mut","span":400,"ty":104}],"span":416,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":0,"span":397},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":null,"composite":null,"name":"data","source_info":{"scope":1,"span":401},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":null,"composite":null,"name":"a","source_info":{"scope":2,"span":383},"value":{"Place":{"local":5,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":3,"span":402},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":1,"composite":null,"name":"dest","source_info":{"scope":4,"span":403},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":2,"composite":null,"name":"src","source_info":{"scope":4,"span":404},"value":{"Place":{"local":9,"projection":[]}}},{"argument_index":null,"composite":null,"name":"result","source_info":{"scope":5,"span":405},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"src","source_info":{"scope":6,"span":406},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":1,"composite":null,"name":"dst","source_info":{"scope":7,"span":407},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":2,"composite":null,"name":"src","source_info":{"scope":7,"span":408},"value":{"Place":{"local":9,"projection":[]}}},{"argument_index":1,"composite":null,"name":"b","source_info":{"scope":8,"span":409},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":1,"composite":null,"name":"b","source_info":{"scope":9,"span":410},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":null,"composite":null,"name":"b","source_info":{"scope":10,"span":388},"value":{"Place":{"local":10,"projection":[]}}},{"argument_index":null,"composite":null,"name":"ptr","source_info":{"scope":11,"span":411},"value":{"Place":{"local":0,"projection":[]}}},{"argument_index":null,"composite":null,"name":"alloc","source_info":{"scope":12,"span":412},"value":{"Const":{"const_":{"id":52,"kind":"ZeroSized","ty":72},"span":50,"user_ty":null}}},{"argument_index":1,"composite":null,"name":"value","source_info":{"scope":13,"span":413},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":14,"span":414},"value":{"Place":{"local":11,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":15,"span":415},"value":{"Place":{"local":13,"projection":[]}}},{"argument_index":1,"composite":null,"name":"src","source_info":{"scope":16,"span":406},"value":{"Place":{"local":12,"projection":[]}}}]}],"id":29,"name":" as core::panic::PanicPayload>::take_box"}},"symbol_name":"_ZN91_$LT$std..panicking..begin_panic..Payload$LT$A$GT$$u20$as$u20$core..panic..PanicPayload$GT$8take_box17h38a7afb365d90d28E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[],"terminator":{"kind":"Return","span":137}}],"locals":[{"mutability":"Mut","span":137,"ty":8},{"mutability":"Not","span":137,"ty":60}],"span":137,"spread_arg":null,"var_debug_info":[]}],"id":14,"name":"std::ptr::drop_in_place::>"}},"symbol_name":"_ZN4core3ptr72drop_in_place$LT$std..panicking..begin_panic..Payload$LT$$RF$str$GT$$GT$17h1b47a62f19fbd5f1E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"StorageLive":2},"span":202},{"kind":{"StorageLive":7},"span":201},{"kind":{"Assign":[{"local":7,"projection":[]},{"NullaryOp":["UbChecks",37]}]},"span":203}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":7,"projection":[]}},"targets":{"branches":[[0,5]],"otherwise":3}}},"span":201}},{"statements":[{"kind":{"StorageDead":5},"span":205},{"kind":{"StorageDead":3},"span":205}],"terminator":{"kind":"Return","span":204}},{"statements":[{"kind":{"StorageDead":2},"span":208},{"kind":{"StorageLive":3},"span":209},{"kind":{"StorageLive":4},"span":210},{"kind":{"Assign":[{"local":4,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":1,"projection":[]}]}]},"span":210},{"kind":{"Assign":[{"local":3,"projection":[]},{"Use":{"Copy":{"local":1,"projection":[{"Field":[0,47]}]}}}]},"span":211},{"kind":{"StorageDead":4},"span":212},{"kind":{"StorageLive":5},"span":213},{"kind":{"StorageLive":6},"span":214},{"kind":{"Assign":[{"local":6,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":1,"projection":[]}]}]},"span":214},{"kind":{"StorageLive":10},"span":215},{"kind":{"Assign":[{"local":10,"projection":[]},{"Use":{"Copy":{"local":1,"projection":[{"Field":[1,65]}]}}}]},"span":215},{"kind":{"StorageLive":12},"span":216},{"kind":{"StorageLive":13},"span":216},{"kind":{"StorageLive":14},"span":216},{"kind":{"StorageLive":15},"span":216},{"kind":{"StorageLive":11},"span":217},{"kind":{"Assign":[{"local":11,"projection":[]},{"Use":{"Copy":{"local":10,"projection":[{"Field":[0,74]}]}}}]},"span":217},{"kind":{"Assign":[{"local":12,"projection":[]},{"Discriminant":{"local":11,"projection":[]}}]},"span":218},{"kind":{"Assign":[{"local":13,"projection":[]},{"BinaryOp":["Ge",{"Copy":{"local":12,"projection":[]}},{"Constant":{"const_":{"id":34,"kind":{"Allocated":{"align":8,"bytes":[1,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":2},"span":218,"user_ty":null}}]}]},"span":218},{"kind":{"Assign":[{"local":14,"projection":[]},{"BinaryOp":["Le",{"Copy":{"local":12,"projection":[]}},{"Constant":{"const_":{"id":35,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,128],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":2},"span":218,"user_ty":null}}]}]},"span":218},{"kind":{"Assign":[{"local":15,"projection":[]},{"BinaryOp":["BitAnd",{"Move":{"local":13,"projection":[]}},{"Move":{"local":14,"projection":[]}}]}]},"span":218},{"kind":{"Intrinsic":{"Assume":{"Move":{"local":15,"projection":[]}}}},"span":218},{"kind":{"Assign":[{"local":5,"projection":[]},{"Cast":["IntToInt",{"Copy":{"local":12,"projection":[]}},47]}]},"span":218},{"kind":{"StorageDead":11},"span":219},{"kind":{"StorageDead":15},"span":216},{"kind":{"StorageDead":14},"span":216},{"kind":{"StorageDead":13},"span":216},{"kind":{"StorageDead":12},"span":216},{"kind":{"StorageDead":10},"span":220},{"kind":{"StorageDead":6},"span":221}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":3,"projection":[]}},{"Move":{"local":5,"projection":[]}}],"destination":{"local":0,"projection":[]},"func":{"Constant":{"const_":{"id":33,"kind":"ZeroSized","ty":73},"span":206,"user_ty":null}},"target":1,"unwind":"Unreachable"}},"span":207}},{"statements":[{"kind":{"StorageLive":9},"span":224},{"kind":{"Assign":[{"local":9,"projection":[]},{"Cast":["PtrToPtr",{"Constant":{"const_":{"id":37,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,7]]}}},"ty":46},"span":50,"user_ty":null}},56]}]},"span":224}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":9,"projection":[]}},{"Constant":{"const_":{"id":19,"kind":{"Allocated":{"align":8,"bytes":[1,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":47},"span":50,"user_ty":null}}],"destination":{"local":8,"projection":[]},"func":{"Constant":{"const_":{"id":36,"kind":"ZeroSized","ty":75},"span":222,"user_ty":null}},"target":4,"unwind":"Unreachable"}},"span":223}},{"statements":[{"kind":{"StorageDead":9},"span":226}],"terminator":{"kind":{"Goto":{"target":5}},"span":225}},{"statements":[{"kind":{"StorageDead":7},"span":229}],"terminator":{"kind":{"Call":{"args":[{"Constant":{"const_":{"id":37,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,7]]}}},"ty":46},"span":50,"user_ty":null}}],"destination":{"local":2,"projection":[]},"func":{"Constant":{"const_":{"id":38,"kind":"ZeroSized","ty":76},"span":227,"user_ty":null}},"target":2,"unwind":"Unreachable"}},"span":228}}],"locals":[{"mutability":"Mut","span":230,"ty":61},{"mutability":"Not","span":231,"ty":69},{"mutability":"Not","span":202,"ty":16},{"mutability":"Mut","span":209,"ty":47},{"mutability":"Mut","span":210,"ty":77},{"mutability":"Mut","span":213,"ty":47},{"mutability":"Mut","span":214,"ty":77},{"mutability":"Mut","span":201,"ty":37},{"mutability":"Not","span":223,"ty":8},{"mutability":"Mut","span":224,"ty":56},{"mutability":"Mut","span":215,"ty":65},{"mutability":"Not","span":217,"ty":74},{"mutability":"Mut","span":217,"ty":2},{"mutability":"Mut","span":218,"ty":37},{"mutability":"Mut","span":218,"ty":37},{"mutability":"Mut","span":218,"ty":37}],"span":237,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"layout","source_info":{"scope":0,"span":231},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":1,"composite":null,"name":"src","source_info":{"scope":1,"span":232},"value":{"Const":{"const_":{"id":37,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,7]]}}},"ty":46},"span":233,"user_ty":null}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":5,"span":234},"value":{"Place":{"local":4,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":6,"span":235},"value":{"Place":{"local":6,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":7,"span":236},"value":{"Place":{"local":10,"projection":[]}}}]}],"id":22,"name":"std::alloc::alloc"}},"symbol_name":"_ZN5alloc5alloc5alloc17h214157fcd92df279E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":2,"blocks":[{"statements":[{"kind":{"StorageLive":3},"span":93},{"kind":{"StorageLive":6},"span":93},{"kind":{"StorageLive":5},"span":94},{"kind":{"Assign":[{"local":5,"projection":[]},{"Cast":["PtrToPtr",{"Copy":{"local":1,"projection":[]}},46]}]},"span":95},{"kind":{"Assign":[{"local":6,"projection":[]},{"Cast":["Transmute",{"Copy":{"local":1,"projection":[]}},47]}]},"span":96},{"kind":{"StorageDead":5},"span":94}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":6,"projection":[]}},"targets":{"branches":[[0,3]],"otherwise":4}}},"span":92}},{"statements":[{"kind":{"StorageDead":3},"span":98}],"terminator":{"kind":"Return","span":97}},{"statements":[],"terminator":{"kind":{"Call":{"args":[{"Constant":{"const_":{"id":17,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,0]]}}},"ty":32},"span":100,"user_ty":null}}],"destination":{"local":4,"projection":[]},"func":{"Constant":{"const_":{"id":16,"kind":"ZeroSized","ty":48},"span":99,"user_ty":null}},"target":null,"unwind":"Unreachable"}},"span":101}},{"statements":[{"kind":{"StorageDead":6},"span":93}],"terminator":{"kind":{"Goto":{"target":2}},"span":93}},{"statements":[{"kind":{"StorageLive":9},"span":104}],"terminator":{"kind":{"Call":{"args":[{"Copy":{"local":2,"projection":[]}}],"destination":{"local":9,"projection":[]},"func":{"Constant":{"const_":{"id":18,"kind":"ZeroSized","ty":49},"span":102,"user_ty":null}},"target":7,"unwind":"Unreachable"}},"span":103}},{"statements":[{"kind":{"StorageDead":9},"span":105},{"kind":{"StorageLive":12},"span":106},{"kind":{"StorageLive":13},"span":107},{"kind":{"Assign":[{"local":13,"projection":[]},{"BinaryOp":["Sub",{"Copy":{"local":2,"projection":[]}},{"Constant":{"const_":{"id":19,"kind":{"Allocated":{"align":8,"bytes":[1,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":47},"span":108,"user_ty":null}}]}]},"span":107},{"kind":{"Assign":[{"local":12,"projection":[]},{"BinaryOp":["BitAnd",{"Copy":{"local":6,"projection":[]}},{"Move":{"local":13,"projection":[]}}]}]},"span":106},{"kind":{"StorageDead":13},"span":109},{"kind":{"Assign":[{"local":3,"projection":[]},{"BinaryOp":["Eq",{"Move":{"local":12,"projection":[]}},{"Constant":{"const_":{"id":20,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":47},"span":110,"user_ty":null}}]}]},"span":111},{"kind":{"StorageDead":12},"span":110},{"kind":{"StorageDead":6},"span":93}],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":3,"projection":[]}},"targets":{"branches":[[0,2]],"otherwise":1}}},"span":93}},{"statements":[{"kind":{"StorageDead":9},"span":105},{"kind":{"StorageLive":8},"span":114},{"kind":{"StorageLive":10},"span":115},{"kind":{"Assign":[{"local":10,"projection":[]},{"Cast":[{"PointerCoercion":"Unsize"},{"Constant":{"const_":{"id":22,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,1]]}}},"ty":51},"span":50,"user_ty":null}},52]}]},"span":115},{"kind":{"StorageLive":11},"span":116},{"kind":{"Assign":[{"local":11,"projection":[]},{"Cast":[{"PointerCoercion":"Unsize"},{"Constant":{"const_":{"id":23,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,2]]}}},"ty":53},"span":50,"user_ty":null}},54]}]},"span":116},{"kind":{"Assign":[{"local":8,"projection":[]},{"Aggregate":[{"Adt":[13,0,[{"Lifetime":{"kind":"ReErased"}}],null,null]},[{"Move":{"local":10,"projection":[]}},{"Constant":{"const_":{"id":24,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0,null,null,null,null,null,null,null,null],"mutability":"Not","provenance":{"ptrs":[]}}},"ty":55},"span":50,"user_ty":null}},{"Move":{"local":11,"projection":[]}}]]}]},"span":117},{"kind":{"StorageDead":11},"span":118},{"kind":{"StorageDead":10},"span":118}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":8,"projection":[]}}],"destination":{"local":7,"projection":[]},"func":{"Constant":{"const_":{"id":21,"kind":"ZeroSized","ty":50},"span":112,"user_ty":null}},"target":null,"unwind":"Terminate"}},"span":113}},{"statements":[],"terminator":{"kind":{"SwitchInt":{"discr":{"Move":{"local":9,"projection":[]}},"targets":{"branches":[[1,5]],"otherwise":6}}},"span":105}}],"locals":[{"mutability":"Mut","span":119,"ty":8},{"mutability":"Not","span":120,"ty":56},{"mutability":"Not","span":120,"ty":47},{"mutability":"Mut","span":93,"ty":37},{"mutability":"Not","span":101,"ty":27},{"mutability":"Mut","span":95,"ty":46},{"mutability":"Mut","span":121,"ty":47},{"mutability":"Not","span":113,"ty":27},{"mutability":"Mut","span":114,"ty":57},{"mutability":"Mut","span":104,"ty":58},{"mutability":"Mut","span":115,"ty":52},{"mutability":"Mut","span":116,"ty":54},{"mutability":"Mut","span":106,"ty":47},{"mutability":"Mut","span":107,"ty":47}],"span":136,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"addr","source_info":{"scope":0,"span":120},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":2,"composite":null,"name":"align","source_info":{"scope":0,"span":120},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":1,"span":122},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":2,"composite":null,"name":"align","source_info":{"scope":1,"span":123},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":2,"span":124},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":4,"span":125},"value":{"Place":{"local":5,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":5,"span":126},"value":{"Place":{"local":5,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":6,"span":127},"value":{"Place":{"local":5,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":7,"span":128},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":2,"composite":null,"name":"align","source_info":{"scope":7,"span":129},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":8,"span":130},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":9,"span":131},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":10,"span":127},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":1,"composite":null,"name":"pieces","source_info":{"scope":11,"span":132},"value":{"Const":{"const_":{"id":25,"kind":{"Allocated":{"align":8,"bytes":[0,0,0,0,0,0,0,0],"mutability":"Mut","provenance":{"ptrs":[[0,3]]}}},"ty":51},"span":133,"user_ty":null}}},{"argument_index":1,"composite":null,"name":"ptr","source_info":{"scope":12,"span":134},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":2,"composite":null,"name":"align","source_info":{"scope":12,"span":135},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":13,"span":126},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":14,"span":127},"value":{"Place":{"local":1,"projection":[]}}}]}],"id":12,"name":"std::ptr::read_volatile::precondition_check"}},"symbol_name":"_ZN4core3ptr13read_volatile18precondition_check17hc773488a477a662fE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"Assign":[{"local":2,"projection":[]},{"NullaryOp":["SizeOf",32]}]},"span":336},{"kind":{"Assign":[{"local":3,"projection":[]},{"NullaryOp":["AlignOf",32]}]},"span":336}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":2,"projection":[]}},{"Move":{"local":3,"projection":[]}}],"destination":{"local":4,"projection":[]},"func":{"Constant":{"const_":{"id":47,"kind":"ZeroSized","ty":88},"span":336,"user_ty":null}},"target":1,"unwind":{"Cleanup":2}}},"span":336}},{"statements":[{"kind":{"Assign":[{"local":0,"projection":[]},{"ShallowInitBox":[{"Move":{"local":4,"projection":[]}},32]}]},"span":336},{"kind":{"Assign":[{"local":5,"projection":[]},{"Use":{"Copy":{"local":0,"projection":[{"Field":[0,89]},{"Field":[0,90]},{"Field":[0,91]}]}}}]},"span":338},{"kind":{"Assign":[{"local":5,"projection":["Deref"]},{"Use":{"Move":{"local":1,"projection":[]}}}]},"span":338}],"terminator":{"kind":"Return","span":337}},{"statements":[],"terminator":{"kind":{"Drop":{"place":{"local":1,"projection":[]},"target":3,"unwind":"Terminate"}},"span":339}},{"statements":[],"terminator":{"kind":"Resume","span":340}}],"locals":[{"mutability":"Mut","span":341,"ty":92},{"mutability":"Not","span":342,"ty":32},{"mutability":"Mut","span":336,"ty":47},{"mutability":"Mut","span":336,"ty":47},{"mutability":"Mut","span":336,"ty":61},{"mutability":"Mut","span":336,"ty":91}],"span":340,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"x","source_info":{"scope":0,"span":342},"value":{"Place":{"local":1,"projection":[]}}}]}],"id":26,"name":"std::boxed::Box::<&str>::new"}},"symbol_name":"_ZN5alloc5boxed12Box$LT$T$GT$3new17hfb7bad2afdef8431E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[{"kind":{"Assign":[{"local":0,"projection":[]},{"Use":{"Constant":{"const_":{"id":28,"kind":{"Allocated":{"align":1,"bytes":[0],"mutability":"Mut","provenance":{"ptrs":[]}}},"ty":23},"span":160,"user_ty":null}}}]},"span":160}],"terminator":{"kind":"Return","span":159}}],"locals":[{"mutability":"Mut","span":161,"ty":23},{"mutability":"Not","span":162,"ty":8}],"span":163,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"self","source_info":{"scope":0,"span":162},"value":{"Const":{"const_":{"id":6,"kind":"ZeroSized","ty":8},"span":50,"user_ty":null}}}]}],"id":17,"name":"<() as std::process::Termination>::report"}},"symbol_name":"_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h6e8cf99dfda5fdefE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":4,"blocks":[{"statements":[{"kind":{"StorageLive":5},"span":19},{"kind":{"StorageLive":6},"span":20},{"kind":{"StorageLive":7},"span":20},{"kind":{"StorageLive":8},"span":21},{"kind":{"Assign":[{"local":8,"projection":[]},{"Aggregate":[{"Closure":[3,[{"Type":8},{"Type":9},{"Type":10},{"Type":11}]]},[{"Copy":{"local":1,"projection":[]}}]]}]},"span":21},{"kind":{"Assign":[{"local":7,"projection":[]},{"Ref":[{"kind":"ReErased"},"Shared",{"local":8,"projection":[]}]}]},"span":20},{"kind":{"Assign":[{"local":6,"projection":[]},{"Cast":[{"PointerCoercion":"Unsize"},{"Move":{"local":7,"projection":[]}},12]}]},"span":20},{"kind":{"StorageDead":7},"span":22}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":6,"projection":[]}},{"Move":{"local":2,"projection":[]}},{"Move":{"local":3,"projection":[]}},{"Move":{"local":4,"projection":[]}}],"destination":{"local":5,"projection":[]},"func":{"Constant":{"const_":{"id":2,"kind":"ZeroSized","ty":7},"span":18,"user_ty":null}},"target":1,"unwind":"Continue"}},"span":19}},{"statements":[{"kind":{"StorageDead":6},"span":24},{"kind":{"Assign":[{"local":0,"projection":[]},{"Use":{"Copy":{"local":5,"projection":[{"Downcast":0},{"Field":[0,13]}]}}}]},"span":25},{"kind":{"StorageDead":8},"span":26},{"kind":{"StorageDead":5},"span":26}],"terminator":{"kind":"Return","span":23}}],"locals":[{"mutability":"Mut","span":27,"ty":13},{"mutability":"Not","span":28,"ty":14},{"mutability":"Not","span":29,"ty":13},{"mutability":"Not","span":30,"ty":15},{"mutability":"Not","span":31,"ty":16},{"mutability":"Mut","span":19,"ty":17},{"mutability":"Mut","span":20,"ty":12},{"mutability":"Mut","span":20,"ty":18},{"mutability":"Not","span":21,"ty":19}],"span":32,"spread_arg":null,"var_debug_info":[{"argument_index":1,"composite":null,"name":"main","source_info":{"scope":0,"span":28},"value":{"Place":{"local":1,"projection":[]}}},{"argument_index":2,"composite":null,"name":"argc","source_info":{"scope":0,"span":29},"value":{"Place":{"local":2,"projection":[]}}},{"argument_index":3,"composite":null,"name":"argv","source_info":{"scope":0,"span":30},"value":{"Place":{"local":3,"projection":[]}}},{"argument_index":4,"composite":null,"name":"sigpipe","source_info":{"scope":0,"span":31},"value":{"Place":{"local":4,"projection":[]}}},{"argument_index":null,"composite":null,"name":"v","source_info":{"scope":1,"span":25},"value":{"Place":{"local":0,"projection":[]}}}]}],"id":2,"name":"std::rt::lang_start::<()>"}},"symbol_name":"_ZN3std2rt10lang_start17hd4017724170dc624E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[],"id":10,"name":"std::intrinsics::type_id::<&str>"}},"symbol_name":"_ZN4core10intrinsics7type_id17h948ad9d7a3771dcdE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[],"terminator":{"kind":"Return","span":137}}],"locals":[{"mutability":"Mut","span":137,"ty":8},{"mutability":"Not","span":137,"ty":43}],"span":137,"spread_arg":null,"var_debug_info":[]}],"id":14,"name":"std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>"}},"symbol_name":"_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h21a5cf619fdd0e23E"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":2,"blocks":[{"statements":[{"kind":{"Assign":[{"local":3,"projection":[]},{"Ref":[{"kind":"ReErased"},{"Mut":{"kind":"Default"}},{"local":1,"projection":[]}]}]},"span":91}],"terminator":{"kind":{"Call":{"args":[{"Move":{"local":3,"projection":[]}},{"Move":{"local":2,"projection":[]}}],"destination":{"local":0,"projection":[]},"func":{"Constant":{"const_":{"id":15,"kind":"ZeroSized","ty":44},"span":91,"user_ty":null}},"target":1,"unwind":{"Cleanup":3}}},"span":91}},{"statements":[],"terminator":{"kind":{"Drop":{"place":{"local":1,"projection":[]},"target":2,"unwind":"Continue"}},"span":91}},{"statements":[],"terminator":{"kind":"Return","span":91}},{"statements":[],"terminator":{"kind":{"Drop":{"place":{"local":1,"projection":[]},"target":4,"unwind":"Terminate"}},"span":91}},{"statements":[],"terminator":{"kind":"Resume","span":91}}],"locals":[{"mutability":"Mut","span":91,"ty":1},{"mutability":"Not","span":91,"ty":19},{"mutability":"Not","span":91,"ty":8},{"mutability":"Not","span":91,"ty":45}],"span":91,"spread_arg":2,"var_debug_info":[]}],"id":11,"name":"<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once"}},"symbol_name":"_ZN4core3ops8function6FnOnce9call_once17h86e2963be1a2fd6aE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":1,"blocks":[{"statements":[],"terminator":{"kind":"Return","span":137}}],"locals":[{"mutability":"Mut","span":137,"ty":8},{"mutability":"Not","span":137,"ty":59}],"span":137,"spread_arg":null,"var_debug_info":[]}],"id":14,"name":"std::ptr::drop_in_place::<&str>"}},"symbol_name":"_ZN4core3ptr28drop_in_place$LT$$RF$str$GT$17h77c483de56b3845cE"},{"details":null,"mono_item_kind":{"MonoItemFn":{"body":[{"arg_count":2,"blocks":[{"statements":[],"terminator":{"kind":{"Call":{"args":[],"destination":{"local":0,"projection":[]},"func":{"Move":{"local":1,"projection":[]}},"target":1,"unwind":"Continue"}},"span":91}},{"statements":[],"terminator":{"kind":"Return","span":91}}],"locals":[{"mutability":"Mut","span":91,"ty":8},{"mutability":"Not","span":91,"ty":14},{"mutability":"Not","span":91,"ty":8}],"span":91,"spread_arg":2,"var_debug_info":[]}],"id":11,"name":">::call_once"}},"symbol_name":"_ZN4core3ops8function6FnOnce9call_once17h11ec6afa27e3d406E"}]} \ No newline at end of file diff --git a/panic_example.smir.json b/panic_example.smir.json new file mode 120000 index 0000000..afb97ef --- /dev/null +++ b/panic_example.smir.json @@ -0,0 +1 @@ +tests/integration/failing/panic_example.smir.json.expected \ No newline at end of file diff --git a/src/driver.rs b/src/driver.rs index 6486b8c..7406e10 100644 --- a/src/driver.rs +++ b/src/driver.rs @@ -24,7 +24,7 @@ extern crate rustc_smir; extern crate rustc_session; use rustc_middle::ty::TyCtxt; use rustc_driver::Compilation; -use rustc_interface::{interface::Compiler, Queries}; +use rustc_interface::interface::Compiler; use rustc_smir::rustc_internal; struct StableMirCallbacks { @@ -35,16 +35,10 @@ impl rustc_driver::Callbacks for StableMirCallbacks { fn after_analysis<'tcx>( &mut self, _compiler: &Compiler, - queries: &'tcx Queries<'tcx>, + tcx: TyCtxt<'tcx>, ) -> Compilation { - let _q = queries - .global_ctxt() - .unwrap() - .get_mut() - .enter(|tcx| { - let _ = rustc_internal::run(tcx, || (self.callback_fn)(tcx)); - }); + let _ = rustc_internal::run(tcx, || (self.callback_fn)(tcx)); Compilation::Continue } diff --git a/src/kani_lib/LICENSE-MIT b/src/kani_lib/LICENSE-MIT deleted file mode 100644 index 31aa793..0000000 --- a/src/kani_lib/LICENSE-MIT +++ /dev/null @@ -1,23 +0,0 @@ -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/src/kani_lib/kani_collector.rs b/src/kani_lib/kani_collector.rs deleted file mode 100644 index 0675235..0000000 --- a/src/kani_lib/kani_collector.rs +++ /dev/null @@ -1,593 +0,0 @@ -use std::iter::Iterator; -use std::vec::Vec; -extern crate rustc_data_structures; -extern crate rustc_hir; -extern crate rustc_middle; -extern crate rustc_monomorphize; -extern crate rustc_span; -extern crate rustc_smir; -extern crate stable_mir; -// use rustc_hir::{def::DefKind, definitions::DefPath}; -use tracing::{debug, debug_span, trace}; -use rustc_data_structures::fx::FxHashSet; -use rustc_data_structures::fingerprint::Fingerprint; -use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; -use rustc_hir::lang_items::LangItem; -use rustc_middle::traits::{ImplSource, ImplSourceUserDefinedData}; -use rustc_middle::ty::adjustment::CustomCoerceUnsized; -use rustc_middle::ty::{TyCtxt, Ty, ParamEnv, VtblEntry, TraitRef}; -use rustc_smir::rustc_internal; -use stable_mir::{CrateItem,CrateDef,ItemKind,mir::{Body,ConstOperand},mir::mono::{Instance, InstanceKind, MonoItem, StaticDef}}; -use stable_mir::mir::{visit::Location, MirVisitor, Rvalue, CastKind, PointerCoercion, Terminator, TerminatorKind}; -use stable_mir::ty::{RigidTy, ClosureKind, ConstantKind, Allocation, Ty as TyStable, TyKind as TyKindStable}; -use stable_mir::mir::alloc::{AllocId, GlobalAlloc}; -use stable_mir::Symbol; - -pub fn collect_all_mono_items(tcx: TyCtxt, initial_mono_items: &[MonoItem]) -> Vec { - let mut collector = MonoItemsCollector::new(tcx); - for item in initial_mono_items { - collector.collect(item.clone()); - } - - tcx.dcx().abort_if_errors(); - // Sort the result so code generation follows deterministic order. - // This helps us to debug the code, but it also provides the user a good experience since the - // order of the errors and warnings is stable. - let mut sorted_items: Vec<_> = collector.collected.into_iter().collect(); - sorted_items.sort_by_cached_key(|item| to_fingerprint(tcx, item)); - sorted_items -} - -struct MonoItemsCollector<'tcx> { - /// The compiler context. - tcx: TyCtxt<'tcx>, - /// Set of collected items used to avoid entering recursion loops. - collected: FxHashSet, - /// Items enqueued for visiting. - queue: Vec, -} - -impl<'tcx> MonoItemsCollector<'tcx> { - pub fn new(tcx: TyCtxt<'tcx>) -> Self { - MonoItemsCollector { - tcx, - collected: FxHashSet::default(), - queue: vec![], - } - } - - pub fn collect(&mut self, root: MonoItem) { - self.queue.push(root); - self.reachable_items(); - } - - fn reachable_items(&mut self) { - while let Some(to_visit) = self.queue.pop() { - if !self.collected.contains(&to_visit) { - self.collected.insert(to_visit.clone()); - let next_items = match &to_visit { - MonoItem::Fn(instance) => self.visit_fn(*instance), - MonoItem::Static(static_def) => self.visit_static(*static_def), - MonoItem::GlobalAsm(_) => { - vec![] - }, - }; - - self.queue - .extend(next_items.into_iter().filter(|item| !self.collected.contains(item))); - } - } - } - - fn visit_fn(&mut self, instance: Instance) -> Vec { - let _guard = debug_span!("visit_fn", function=?instance).entered(); - if let Some(body) = instance.body() { - let mut collector = MonoItemsFnCollector { tcx: self.tcx, collected: FxHashSet::default(), body: &body }; - collector.visit_body(&body); - collector.collected.into_iter().collect() - } else { - // println!("{instance:#?}"); - vec![] - } - } - - /// Visit a static object and collect drop / initialization functions. - fn visit_static(&mut self, def: StaticDef) -> Vec { - let _guard = debug_span!("visit_static", ?def).entered(); - let mut next_items = vec![]; - - // Collect drop function. - let static_ty = def.ty(); - let instance = Instance::resolve_drop_in_place(static_ty); - next_items.push(instance.into()); - - // Collect initialization. - let alloc = def.eval_initializer().unwrap(); - for (_, prov) in alloc.provenance.ptrs { - next_items.extend(collect_alloc_items(prov.0).into_iter()); - } - - next_items - } - - // /// Visit global assembly and collect its item. - // fn visit_asm(&mut self, item: &MonoItem) { - // debug!(?item, "visit_asm"); - // } -} - -struct MonoItemsFnCollector<'a, 'tcx> { - tcx: TyCtxt<'tcx>, - collected: FxHashSet, - body: &'a Body, -} - -impl<'a, 'tcx> MonoItemsFnCollector<'a, 'tcx> { - /// Collect the implementation of all trait methods and its supertrait methods for the given - /// concrete type. - fn collect_vtable_methods(&mut self, concrete_ty: TyStable, trait_ty: TyStable) { - trace!(?concrete_ty, ?trait_ty, "collect_vtable_methods"); - let concrete_kind = concrete_ty.kind(); - let trait_kind = trait_ty.kind(); - - assert!(!concrete_kind.is_trait(), "expected a concrete type, but found `{concrete_ty:?}`"); - assert!(trait_kind.is_trait(), "expected a trait `{trait_ty:?}`"); - if let Some(principal) = trait_kind.trait_principal() { - // A trait object type can have multiple trait bounds but up to one non-auto-trait - // bound. This non-auto-trait, named principal, is the only one that can have methods. - // https://doc.rust-lang.org/reference/special-types-and-traits.html#auto-traits - let poly_trait_ref = principal.with_self_ty(concrete_ty); - - // Walk all methods of the trait, including those of its supertraits - let entries = - self.tcx.vtable_entries(rustc_internal::internal(self.tcx, &poly_trait_ref)); - let methods = entries.iter().filter_map(|entry| match entry { - VtblEntry::MetadataAlign - | VtblEntry::MetadataDropInPlace - | VtblEntry::MetadataSize - | VtblEntry::Vacant => None, - VtblEntry::TraitVPtr(_) => { - // all super trait items already covered, so skip them. - None - } - VtblEntry::Method(instance) => { - let instance = rustc_internal::stable(instance); - should_codegen_locally(&instance).then_some(MonoItem::Fn(instance)) - } - }); - trace!(methods=?methods.clone().collect::>(), "collect_vtable_methods"); - self.collected.extend(methods); - } - - // Add the destructor for the concrete type. - let instance = Instance::resolve_drop_in_place(concrete_ty); - self.collect_instance(instance, false); - } - - /// Collect an instance depending on how it is used (invoked directly or via fn_ptr). - fn collect_instance(&mut self, instance: Instance, is_direct_call: bool) { - let should_collect = match instance.kind { - InstanceKind::Virtual { .. } | InstanceKind::Intrinsic => { // TODO: Outdated - // Instance definition has no body. - assert!(is_direct_call, "Expected direct call {instance:?}"); - false - } - InstanceKind::Shim | InstanceKind::Item => true, - }; - if should_collect && should_codegen_locally(&instance) { - trace!(?instance, "collect_instance"); - self.collected.insert(instance.into()); - } - } - - /// Collect constant values represented by static variables. - fn collect_allocation(&mut self, alloc: &Allocation) { - debug!(?alloc, "collect_allocation"); - for (_, id) in &alloc.provenance.ptrs { - self.collected.extend(collect_alloc_items(id.0).into_iter()) - } - } -} - -/// Visit every instruction in a function and collect the following: -/// 1. Every function / method / closures that may be directly invoked. -/// 2. Every function / method / closures that may have their address taken. -/// 3. Every method that compose the impl of a trait for a given type when there's a conversion -/// from the type to the trait. -/// - I.e.: If we visit the following code: -/// ``` -/// let var = MyType::new(); -/// let ptr : &dyn MyTrait = &var; -/// ``` -/// We collect the entire implementation of `MyTrait` for `MyType`. -/// 4. Every Static variable that is referenced in the function or constant used in the function. -/// 5. Drop glue. -/// 6. Static Initialization -/// -/// Remark: This code has been mostly taken from `rustc_monomorphize::collector::MirNeighborCollector`. -impl<'a, 'tcx> MirVisitor for MonoItemsFnCollector<'a, 'tcx> { - /// Collect the following: - /// - Trait implementations when casting from concrete to dyn Trait. - /// - Functions / Closures that have their address taken. - /// - Thread Local. - fn visit_rvalue(&mut self, rvalue: &Rvalue, location: Location) { - trace!(rvalue=?*rvalue, "visit_rvalue"); - - match *rvalue { - Rvalue::Cast( - CastKind::PointerCoercion(PointerCoercion::Unsize), - ref operand, - target, - ) => { - // Check if the conversion include casting a concrete type to a trait type. - // If so, collect items from the impl `Trait for Concrete {}`. - let target_ty = target; - let source_ty = operand.ty(self.body.locals()).unwrap(); - let (src_ty, dst_ty) = extract_unsize_coercion(self.tcx, source_ty, target_ty); - if !src_ty.kind().is_trait() && dst_ty.kind().is_trait() { - debug!(?src_ty, ?dst_ty, "collect_vtable_methods"); - self.collect_vtable_methods(src_ty, dst_ty); - } - } - Rvalue::Cast( - CastKind::PointerCoercion(PointerCoercion::ReifyFnPointer), - ref operand, - _, - ) => { - let fn_kind = operand.ty(self.body.locals()).unwrap().kind(); - if let RigidTy::FnDef(fn_def, args) = fn_kind.rigid().unwrap() { - let instance = Instance::resolve_for_fn_ptr(*fn_def, args).unwrap(); - self.collect_instance(instance, false); - } else { - unreachable!("Expected FnDef type, but got: {:?}", fn_kind); - } - } - Rvalue::Cast( - CastKind::PointerCoercion(PointerCoercion::ClosureFnPointer(_)), - ref operand, - _, - ) => { - let source_ty = operand.ty(self.body.locals()).unwrap(); - match source_ty.kind().rigid().unwrap() { - RigidTy::Closure(def_id, args) => { - let instance = - Instance::resolve_closure(*def_id, args, ClosureKind::FnOnce) - .expect("failed to normalize and resolve closure during codegen"); - self.collect_instance(instance, false); - } - _ => unreachable!("Unexpected type: {:?}", source_ty), - } - } - Rvalue::ThreadLocalRef(item) => { - trace!(?item, "visit_rvalue thread_local"); - self.collected.insert(MonoItem::Static(StaticDef::try_from(item).unwrap())); - } - _ => { /* not interesting */ } - } - - self.super_rvalue(rvalue, location); - } - - /// Collect constants that are represented as static variables. - fn visit_const_operand(&mut self, constant: &ConstOperand, location: Location) { - debug!(?constant, ?location, literal=?constant.const_, "visit_constant"); - let allocation = match constant.const_.kind() { - ConstantKind::Allocated(allocation) => allocation, - ConstantKind::Unevaluated(_) => { - unreachable!("Instance with polymorphic constant: `{constant:?}`") - } - ConstantKind::Param(_) => unreachable!("Unexpected parameter constant: {constant:?}"), - ConstantKind::ZeroSized => { - // Nothing to do here. - return; - } - ConstantKind::Ty(_) => { - // Nothing to do here. - return; - } - }; - self.collect_allocation(&allocation); - } - - /// Collect function calls. - fn visit_terminator(&mut self, terminator: &Terminator, location: Location) { - trace!(?terminator, ?location, "visit_terminator"); - - match terminator.kind { - TerminatorKind::Call { ref func, .. } => { - let fn_ty = func.ty(self.body.locals()).unwrap(); - if let TyKindStable::RigidTy(RigidTy::FnDef(fn_def, args)) = fn_ty.kind() { - let instance = Instance::resolve(fn_def, &args).unwrap(); - self.collect_instance(instance, true); - } else { - assert!( - matches!(fn_ty.kind().rigid(), Some(RigidTy::FnPtr(..))), - "Unexpected type: {fn_ty:?}" - ); - } - } - TerminatorKind::Drop { ref place, .. } => { - let place_ty = place.ty(self.body.locals()).unwrap(); - let instance = Instance::resolve_drop_in_place(place_ty); - self.collect_instance(instance, true); - } - TerminatorKind::InlineAsm { .. } => { - // We don't support inline assembly. This shall be replaced by an unsupported - // construct during codegen. - } - TerminatorKind::Abort { .. } | TerminatorKind::Assert { .. } => { - // We generate code for this without invoking any lang item. - } - TerminatorKind::Goto { .. } - | TerminatorKind::SwitchInt { .. } - | TerminatorKind::Resume - | TerminatorKind::Return - | TerminatorKind::Unreachable => {} - } - - self.super_terminator(terminator, location); - } -} - -#[derive(Debug)] -pub struct CoercionBase<'tcx> { - pub src_ty: Ty<'tcx>, - pub dst_ty: Ty<'tcx>, -} - -fn extract_unsize_coercion(tcx: TyCtxt, orig_ty: TyStable, dst_trait: TyStable) -> (TyStable, TyStable) { - let CoercionBase { src_ty, dst_ty } = extract_unsize_casting( - tcx, - rustc_internal::internal(tcx, orig_ty), - rustc_internal::internal(tcx, dst_trait), - ); - (rustc_internal::stable(src_ty), rustc_internal::stable(dst_ty)) -} - -/// Return whether we should include the item into codegen. -fn should_codegen_locally(instance: &Instance) -> bool { - !instance.is_foreign_item() -} - -/// Convert a `MonoItem` into a stable `Fingerprint` which can be used as a stable hash across -/// compilation sessions. This allow us to provide a stable deterministic order to codegen. -fn to_fingerprint(tcx: TyCtxt, item: &MonoItem) -> Fingerprint { - tcx.with_stable_hashing_context(|mut hcx| { - let mut hasher = StableHasher::new(); - rustc_internal::internal(tcx, item).hash_stable(&mut hcx, &mut hasher); - hasher.finish() - }) -} - -fn collect_alloc_items(alloc_id: AllocId) -> Vec { - trace!(?alloc_id, "collect_alloc_items"); - let mut items = vec![]; - match GlobalAlloc::from(alloc_id) { - GlobalAlloc::Static(def) => { - // This differ from rustc's collector since rustc does not include static from - // upstream crates. - let instance = Instance::try_from(CrateItem::from(def)).unwrap(); - should_codegen_locally(&instance).then(|| items.push(MonoItem::from(def))); - } - GlobalAlloc::Function(instance) => { - should_codegen_locally(&instance).then(|| items.push(MonoItem::from(instance))); - } - GlobalAlloc::Memory(alloc) => { - items.extend( - alloc.provenance.ptrs.iter().flat_map(|(_, prov)| collect_alloc_items(prov.0)), - ); - } - vtable_alloc @ GlobalAlloc::VTable(..) => { - let vtable_id = vtable_alloc.vtable_allocation().unwrap(); - items = collect_alloc_items(vtable_id); - } - }; - items -} - -/// Collect all (top-level) items in the crate that matches the given predicate. -/// An item can only be a root if they are a non-generic function. -pub fn filter_crate_items(tcx: TyCtxt, predicate: F) -> Vec -where - F: Fn(TyCtxt, Instance) -> bool, -{ - let crate_items = stable_mir::all_local_items(); - // Filter regular items. - crate_items - .iter() - .filter_map(|item| { - // Only collect monomorphic items. - // TODO: Remove the def_kind check once https://github.com/rust-lang/rust/pull/119135 has been released. - let def_id = rustc_internal::internal(tcx, item.def_id()); - (matches!(tcx.def_kind(def_id), rustc_hir::def::DefKind::Ctor(..)) - || matches!(item.kind(), ItemKind::Fn)) - .then(|| { - Instance::try_from(*item) - .ok() - .and_then(|instance| predicate(tcx, instance).then_some(instance)) - }) - .flatten() - }) - .collect::>() -} - -pub fn extract_unsize_casting<'tcx>( - tcx: TyCtxt<'tcx>, - src_ty: Ty<'tcx>, - dst_ty: Ty<'tcx>, -) -> CoercionBase<'tcx> { - trace!(?src_ty, ?dst_ty, "extract_unsize_casting"); - // Iterate over the pointer structure to find the builtin pointer that will store the metadata. - let coerce_info = CoerceUnsizedIterator::new( - tcx, - rustc_internal::stable(src_ty), - rustc_internal::stable(dst_ty), - ) - .last() - .unwrap(); - // Extract the pointee type that is being coerced. - let src_pointee_ty = extract_pointee(tcx, coerce_info.src_ty).expect(&format!( - "Expected source to be a pointer. Found {:?} instead", - coerce_info.src_ty - )); - let dst_pointee_ty = extract_pointee(tcx, coerce_info.dst_ty).expect(&format!( - "Expected destination to be a pointer. Found {:?} instead", - coerce_info.dst_ty - )); - // Find the tail of the coercion that determines the type of metadata to be stored. - let (src_base_ty, dst_base_ty) = tcx.struct_lockstep_tails_erasing_lifetimes( - src_pointee_ty, - dst_pointee_ty, - ParamEnv::reveal_all(), - ); - trace!(?src_base_ty, ?dst_base_ty, "extract_unsize_casting result"); - assert!( - dst_base_ty.is_trait() || dst_base_ty.is_slice(), - "Expected trait or slice as destination of unsized cast, but found {dst_base_ty:?}" - ); - CoercionBase { src_ty: src_base_ty, dst_ty: dst_base_ty } -} - -/// This structure represents the base of a coercion. -/// -/// This base is used to determine the information that will be stored in the metadata. -/// E.g.: In order to convert an `Rc` into an `Rc`, we need to generate a -/// vtable that represents the `impl Debug for String`. So this type will carry the `String` type -/// as the `src_ty` and the `dyn Debug` trait as `dst_ty`. - -/// Iterates over the coercion path of a structure that implements `CoerceUnsized` trait. -/// The `CoerceUnsized` trait indicates that this is a pointer or a wrapper for one, where -/// unsizing can be performed on the pointee. More details: -/// -/// -/// Given an unsized coercion between `impl CoerceUnsized` to `impl CoerceUnsized` where -/// `T` is sized and `U` is unsized, this iterator will walk over the fields that lead to a -/// pointer to `T`, which shall be converted from a thin pointer to a fat pointer. -/// -/// Each iteration will also include an optional name of the field that differs from the current -/// pair of types. -/// -/// The first element of the iteration will always be the starting types. -/// The last element of the iteration will always be pointers to `T` and `U`. -/// After unsized element has been found, the iterator will return `None`. -pub struct CoerceUnsizedIterator<'tcx> { - tcx: TyCtxt<'tcx>, - src_ty: Option, - dst_ty: Option, -} - -/// Represent the information about a coercion. -#[derive(Debug, Clone, PartialEq)] -pub struct CoerceUnsizedInfo { - /// The name of the field from the current types that differs between each other. - pub field: Option, - /// The type being coerced. - pub src_ty: TyStable, - /// The type that is the result of the coercion. - pub dst_ty: TyStable, -} - -impl<'tcx> CoerceUnsizedIterator<'tcx> { - pub fn new( - tcx: TyCtxt<'tcx>, - src_ty: TyStable, - dst_ty: TyStable, - ) -> CoerceUnsizedIterator<'tcx> { - CoerceUnsizedIterator { tcx, src_ty: Some(src_ty), dst_ty: Some(dst_ty) } - } -} - -/// Iterate over the coercion path. At each iteration, it returns the name of the field that must -/// be coerced, as well as the current source and the destination. -/// E.g.: The first iteration of casting `NonNull` -> `NonNull<&dyn Debug>` will return -/// ```rust,ignore -/// CoerceUnsizedInfo { -/// field: Some("ptr"), -/// src_ty, // NonNull -/// dst_ty // NonNull<&dyn Debug> -/// } -/// ``` -/// while the last iteration will return: -/// ```rust,ignore -/// CoerceUnsizedInfo { -/// field: None, -/// src_ty: Ty, // *const String -/// dst_ty: Ty, // *const &dyn Debug -/// } -/// ``` -impl<'tcx> Iterator for CoerceUnsizedIterator<'tcx> { - type Item = CoerceUnsizedInfo; - - fn next(&mut self) -> Option { - if self.src_ty.is_none() { - assert_eq!(self.dst_ty, None, "Expected no dst type."); - return None; - } - - // Extract the pointee types from pointers (including smart pointers) that form the base of - // the conversion. - let src_ty = self.src_ty.take().unwrap(); - let dst_ty = self.dst_ty.take().unwrap(); - let field = match (src_ty.kind(), dst_ty.kind()) { - ( - TyKindStable::RigidTy(RigidTy::Adt(src_def, ref src_args)), - TyKindStable::RigidTy(RigidTy::Adt(dst_def, ref dst_args)), - ) => { - // Handle smart pointers by using CustomCoerceUnsized to find the field being - // coerced. - assert_eq!(src_def, dst_def); - let src_fields = &src_def.variants_iter().next().unwrap().fields(); - let dst_fields = &dst_def.variants_iter().next().unwrap().fields(); - assert_eq!(src_fields.len(), dst_fields.len()); - - let CustomCoerceUnsized::Struct(coerce_index) = custom_coerce_unsize_info( - self.tcx, - rustc_internal::internal(self.tcx, src_ty), - rustc_internal::internal(self.tcx, dst_ty), - ); - let coerce_index = coerce_index.as_usize(); - assert!(coerce_index < src_fields.len()); - - self.src_ty = Some(src_fields[coerce_index].ty_with_args(&src_args)); - self.dst_ty = Some(dst_fields[coerce_index].ty_with_args(&dst_args)); - Some(src_fields[coerce_index].name.clone()) - } - _ => { - // Base case is always a pointer (Box, raw_pointer or reference). - assert!( - extract_pointee(self.tcx, src_ty).is_some(), - "Expected a pointer, but found {src_ty:?}" - ); - None - } - }; - Some(CoerceUnsizedInfo { field, src_ty, dst_ty }) - } -} - -/// Get information about an unsized coercion. -/// This code was extracted from `rustc_monomorphize` crate. -/// -fn custom_coerce_unsize_info<'tcx>( - tcx: TyCtxt<'tcx>, - source_ty: Ty<'tcx>, - target_ty: Ty<'tcx>, -) -> CustomCoerceUnsized { - let def_id = tcx.require_lang_item(LangItem::CoerceUnsized, None); - - let trait_ref = TraitRef::new(tcx, def_id, tcx.mk_args_trait(source_ty, [target_ty.into()])); - - match tcx.codegen_select_candidate((ParamEnv::reveal_all(), trait_ref)) { - Ok(ImplSource::UserDefined(ImplSourceUserDefinedData { impl_def_id, .. })) => { - tcx.coerce_unsized_info(impl_def_id).unwrap().custom_kind.unwrap() - } - impl_source => { - unreachable!("invalid `CoerceUnsized` impl_source: {:?}", impl_source); - } - } -} - -/// Extract pointee type from builtin pointer types. -fn extract_pointee(tcx: TyCtxt<'_>, typ: TyStable) -> Option> { - rustc_internal::internal(tcx, typ).builtin_deref(true) -} diff --git a/src/kani_lib/mod.rs b/src/kani_lib/mod.rs deleted file mode 100644 index e22c8f1..0000000 --- a/src/kani_lib/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -// This module wraps code derived from the kani project -// -// https://github.com/model-checking/kani -// -// Code used under license; see license file in the module directory. - -pub mod kani_collector; diff --git a/src/lib.rs b/src/lib.rs index b6696bc..f17c342 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,5 @@ #![feature(rustc_private)] pub mod driver; pub mod printer; -pub mod kani_lib; pub use driver::stable_mir_driver; pub use printer::*; diff --git a/src/main.rs b/src/main.rs index 1fb986d..d1c9700 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,6 @@ use std::env; pub mod driver; pub mod printer; -pub mod kani_lib; use driver::stable_mir_driver; use printer::emit_smir; diff --git a/src/printer.rs b/src/printer.rs index 45a72c8..3207266 100644 --- a/src/printer.rs +++ b/src/printer.rs @@ -11,18 +11,24 @@ extern crate stable_mir; extern crate serde; extern crate serde_json; use rustc_middle as middle; -use rustc_middle::ty::{TyCtxt, Ty, TyKind, EarlyBinder, FnSig, GenericArgs, TypeFoldable, ParamEnv}; //, Binder, Generics, GenericPredicates +use rustc_middle::ty::{TyCtxt, Ty, TyKind, EarlyBinder, FnSig, GenericArgs, TypeFoldable, TypingEnv}; use rustc_session::config::{OutFileName, OutputType}; -use rustc_span::{def_id::{DefId, LOCAL_CRATE}, symbol}; // DUMMY_SP, symbol::sym::test; +use rustc_span::{def_id::{DefId, LOCAL_CRATE}, symbol}; use rustc_smir::rustc_internal; -use stable_mir::{CrateItem,CrateDef,ItemKind,mir::{Body,LocalDecl,Terminator,TerminatorKind,Rvalue,visit::MirVisitor},ty::{Allocation,ForeignItemKind},mir::mono::{MonoItem,Instance,InstanceKind},visited_tys,visited_alloc_ids}; // Symbol +use stable_mir::{ + CrateItem, + CrateDef, + ItemKind, + mir::{Body,LocalDecl,Terminator,TerminatorKind,Rvalue,visit::MirVisitor}, + ty::{Allocation,ForeignItemKind}, + mir::mono::{MonoItem,Instance,InstanceKind} +}; use serde::{Serialize, Serializer}; -use crate::kani_lib::kani_collector::{filter_crate_items, collect_all_mono_items}; // Structs for serializing extra details about mono items // ====================================================== -#[derive(Serialize)] +#[derive(Serialize, Clone)] struct BodyDetails { pp: String, } @@ -33,7 +39,7 @@ fn get_body_details(body: &Body) -> BodyDetails { BodyDetails { pp: str::from_utf8(&v).unwrap().into() } } -#[derive(Serialize)] +#[derive(Serialize, Clone)] struct GenericData(Vec<(String,String)>); // Alternatively, GenericData<'a>(Vec<(&'a Generics,GenericPredicates<'a>)>); fn generic_data(tcx: TyCtxt<'_>, id: DefId) -> GenericData { @@ -50,7 +56,7 @@ fn generic_data(tcx: TyCtxt<'_>, id: DefId) -> GenericData { return GenericData(v); } -#[derive(Serialize)] +#[derive(Serialize, Clone)] struct ItemDetails { // these fields only defined for fn items fn_instance_kind: Option, @@ -68,7 +74,8 @@ fn default_unwrap_early_binder<'tcx, T>(tcx: TyCtxt<'tcx>, id: DefId, v: EarlyBi where T: TypeFoldable> { let v_copy = v.clone(); - match tcx.try_instantiate_and_normalize_erasing_regions(GenericArgs::identity_for_item(tcx, id), tcx.param_env(id), v) { + let body = tcx.optimized_mir(id); + match tcx.try_instantiate_and_normalize_erasing_regions(GenericArgs::identity_for_item(tcx, id), body.typing_env(tcx), v) { Ok(res) => return res, Err(err) => { println!("{:?}", err); v_copy.skip_binder() } } @@ -81,7 +88,8 @@ fn print_type<'tcx>(tcx: TyCtxt<'tcx>, id: DefId, ty: EarlyBinder<'tcx, Ty<'tcx> // since FnDef doesn't contain signature, lookup actual function type // via getting fn signature with parameters and resolving those parameters let sig0 = tcx.fn_sig(fun_id); - let sig1 = match tcx.try_instantiate_and_normalize_erasing_regions(args, tcx.param_env(fun_id), sig0) { + let body = tcx.optimized_mir(id); + let sig1 = match tcx.try_instantiate_and_normalize_erasing_regions(args, body.typing_env(tcx), sig0) { Ok(res) => res, Err(err) => { println!("{:?}", err); sig0.skip_binder() } }; @@ -195,6 +203,12 @@ fn fn_inst_for_ty(ty: stable_mir::ty::Ty, direct_call: bool) -> Option }).flatten() } +fn def_id_to_inst(tcx: TyCtxt<'_>, id: stable_mir::DefId) -> Instance { + let internal_id = rustc_internal::internal(tcx,id); + let internal_inst = rustc_middle::ty::Instance::mono(tcx, internal_id); + rustc_internal::stable(internal_inst) +} + fn take_any(map: &mut HashMap) -> Option<(K,V)> { let key = map.keys().next()?.clone(); map.remove(&key).map(|val| (key,val)) @@ -210,7 +224,7 @@ fn hash(obj: T) -> u64 { // Structs for serializing critical details about mono items // ========================================================= -#[derive(Serialize)] +#[derive(Serialize, Clone)] enum MonoItemKind { MonoItemFn { name: String, @@ -226,7 +240,7 @@ enum MonoItemKind { asm: String, }, } -#[derive(Serialize)] +#[derive(Serialize, Clone)] struct Item { #[serde(skip)] mono_item: MonoItem, @@ -354,14 +368,28 @@ impl Serialize for ItemSource { } } +#[derive(Serialize)] +pub enum AllocInfo { + Function(stable_mir::mir::mono::Instance), + VTable(stable_mir::ty::Ty, Option>), + Static(stable_mir::mir::mono::StaticDef), + Memory(stable_mir::ty::Allocation), // TODO include stable_mir::ty::TyKind? +} type LinkMap<'tcx> = HashMap, (ItemSource, FnSymType)>; +type AllocMap = HashMap; +type TyMap = HashMap)>; -struct LinkNameCollector<'tcx, 'local> { +struct InternedValueCollector<'tcx, 'local> { tcx: TyCtxt<'tcx>, - link_map: &'local mut LinkMap<'tcx>, + _sym: String, locals: &'local [LocalDecl], + link_map: &'local mut LinkMap<'tcx>, + visited_allocs: &'local mut AllocMap, + visited_tys: &'local mut TyMap, } +type InternedValues<'tcx> = (LinkMap<'tcx>, AllocMap, TyMap); + fn update_link_map<'tcx>(link_map: &mut LinkMap<'tcx>, fn_sym: Option>, source: ItemSource) { if fn_sym.is_none() { return } let (ty, kind, name) = fn_sym.unwrap(); @@ -383,7 +411,125 @@ fn update_link_map<'tcx>(link_map: &mut LinkMap<'tcx>, fn_sym: Option { +fn get_prov_type(maybe_kind: Option) -> Option { + use stable_mir::ty::RigidTy; + // check for pointers + let kind = if let Some(kind) = maybe_kind { kind } else { return None }; + if let Some(ty) = kind.builtin_deref(true) { + return ty.ty.kind().into(); + } + match kind.rigid().expect("Non-rigid-ty allocation found!") { + RigidTy::Array(ty, _) | RigidTy::Slice(ty) => ty.kind().into(), + RigidTy::FnPtr(_) => None, + _ => todo!(), + } +} + +fn collect_alloc(val_collector: &mut InternedValueCollector, kind: Option, val: stable_mir::mir::alloc::AllocId) { + use stable_mir::mir::alloc::GlobalAlloc; + let entry = val_collector.visited_allocs.entry(val); + if matches!(entry, std::collections::hash_map::Entry::Occupied(_)) { return; } + let global_alloc = GlobalAlloc::from(val); + match global_alloc { + GlobalAlloc::Memory(ref alloc) => { + let pointed_kind = get_prov_type(kind); + if debug_enabled() { println!("DEBUG: called collect_alloc: {:?}:{:?}:{:?}", val, pointed_kind, global_alloc); } + entry.or_insert(AllocInfo::Memory(alloc.clone())); // TODO: include pointed_kind.clone().unwrap() ? + alloc.provenance.ptrs.iter().for_each(|(_, prov)| { + collect_alloc(val_collector, pointed_kind.clone(), prov.0); + }); + } + GlobalAlloc::Static(def) => { + assert!(kind.clone().unwrap().builtin_deref(true).is_some(), "Allocated pointer is not a built-in pointer type: {:?}", kind); + entry.or_insert(AllocInfo::Static(def)); + }, + GlobalAlloc::VTable(ty, traitref) => { + assert!(kind.clone().unwrap().builtin_deref(true).is_some(), "Allocated pointer is not a built-in pointer type: {:?}", kind); + entry.or_insert(AllocInfo::VTable(ty, traitref)); + }, + GlobalAlloc::Function(inst) => { + assert!(kind.unwrap().is_fn_ptr()); + entry.or_insert(AllocInfo::Function(inst)); + }, + }; +} + +fn collect_vec_tys(collector: &mut InternedValueCollector, tys: Vec) { + tys.into_iter().for_each(|ty| collect_ty(collector, ty)); +} + +fn collect_arg_tys(collector: &mut InternedValueCollector, args: &stable_mir::ty::GenericArgs) { + use stable_mir::ty::{GenericArgKind::*, TyConstKind::*}; // TyConst + for arg in args.0.iter() { + match arg { + Type(ty) => collect_ty(collector, *ty), + Const(ty_const) => match ty_const.kind() { + Value(ty, _) | ZSTValue(ty) => collect_ty(collector, *ty), + _ => {} + }, + _ => {} + } + } +} + +fn collect_ty(val_collector: &mut InternedValueCollector, val: stable_mir::ty::Ty) { + use stable_mir::ty::{RigidTy::*, TyKind::RigidTy, AdtDef}; + + // HACK: std::fmt::Arguments has escaping bounds and will error if trying to get the layout. + // We will just ban producing the layout for now see, this issue for more info + // https://github.com/runtimeverification/smir_pretty/issues/27 + let maybe_layout = match val.kind() { + stable_mir::ty::TyKind::RigidTy(Adt(AdtDef(def_id_stable), _)) => { + let def_id_internal = rustc_internal::internal(val_collector.tcx, def_id_stable); + let name = rustc_middle::ty::print::with_no_trimmed_paths!(val_collector.tcx.def_path_str(def_id_internal)); + if String::from("std::fmt::Arguments") == name { + None + } else { + Some(val.layout()) + } + }, + _ => { + Some(val.layout()) + } + }; + + let maybe_layout_shape = if let Some(Ok(layout)) = maybe_layout { + Some(layout.shape()) + } else { + None + }; + + if val_collector.visited_tys.insert(hash(val), (val.kind(), maybe_layout_shape)).is_some() { + match val.kind() { + RigidTy(Array(ty, _) | Pat(ty, _) | Slice(ty) | RawPtr(ty, _) | Ref(_, ty, _)) => { + collect_ty(val_collector, ty) + } + RigidTy(Tuple(tys)) => collect_vec_tys(val_collector, tys), + RigidTy(Adt(def, ref args)) => { + for variant in def.variants_iter() { + for field in variant.fields() { + collect_ty(val_collector, field.ty()); + } + } + collect_arg_tys(val_collector, args); + } + // FIXME: Would be good to grab the coroutine signature + RigidTy(Coroutine(_, ref args, _) | CoroutineWitness(_, ref args)) => collect_arg_tys(val_collector, args), + ref kind @ RigidTy(FnDef(_, ref args) | Closure(_, ref args)) => { + collect_vec_tys(val_collector, kind.fn_sig().unwrap().value.inputs_and_output); + collect_arg_tys(val_collector, args); + } + RigidTy(Foreign(def)) => match def.kind() { + ForeignItemKind::Fn(def) => collect_vec_tys(val_collector, def.fn_sig().value.inputs_and_output), + ForeignItemKind::Type(ty) => collect_ty(val_collector, ty), + ForeignItemKind::Static(def) => collect_ty(val_collector, def.ty()), + } + _ => {} + } + } +} + +impl MirVisitor for InternedValueCollector<'_, '_> { fn visit_terminator(&mut self, term: &Terminator, loc: stable_mir::mir::visit::Location) { use TerminatorKind::*; use stable_mir::mir::{Operand::Constant, ConstOperand}; @@ -416,14 +562,37 @@ impl MirVisitor for LinkNameCollector<'_, '_> { }; self.super_rvalue(rval, loc); } + + fn visit_mir_const(&mut self, constant: &stable_mir::ty::MirConst, loc: stable_mir::mir::visit::Location) { + use stable_mir::ty::{ConstantKind, TyConstKind}; // TyConst + match constant.kind() { + ConstantKind::Allocated(alloc) => { + if debug_enabled() { println!("visited_mir_const::Allocated({:?}) as {:?}", alloc, constant.ty().kind()); } + alloc.provenance.ptrs.iter().for_each(|(_offset, prov)| collect_alloc(self, Some(constant.ty().kind()), prov.0)); + }, + ConstantKind::Ty(ty_const) => { + if let TyConstKind::Value(..) = ty_const.kind() { + panic!("TyConstKind::Value"); + } + }, + ConstantKind::Unevaluated(_) | ConstantKind::Param(_) | ConstantKind::ZeroSized => {} + } + self.super_mir_const(constant, loc); + } + + fn visit_ty(&mut self, ty: &stable_mir::ty::Ty, _location: stable_mir::mir::visit::Location) { + collect_ty(self, *ty); + } } -fn collect_fn_calls<'tcx,'local>(tcx: TyCtxt<'tcx>, items: Vec<&'local MonoItem>) -> Vec<(LinkMapKey<'tcx>, (ItemSource, FnSymType))> { - let mut hash_map = HashMap::new(); +fn collect_interned_values<'tcx,'local>(tcx: TyCtxt<'tcx>, items: Vec<&'local MonoItem>) -> InternedValues<'tcx> { + let mut calls_map = HashMap::new(); + let mut visited_tys = HashMap::new(); + let mut visited_allocs = HashMap::new(); if link_items_enabled() { for item in items.iter() { if let MonoItem::Fn ( inst ) = item { - update_link_map(&mut hash_map, fn_inst_sym(tcx, None, Some(inst)), ItemSource(ITEM)) + update_link_map(&mut calls_map, fn_inst_sym(tcx, None, Some(inst)), ItemSource(ITEM)) } } } @@ -431,22 +600,36 @@ fn collect_fn_calls<'tcx,'local>(tcx: TyCtxt<'tcx>, items: Vec<&'local MonoItem> match &item { MonoItem::Fn( inst ) => { for body in get_bodies(tcx, inst).into_iter() { - LinkNameCollector { + InternedValueCollector { + tcx, + _sym: inst.mangled_name(), + locals: body.locals(), + link_map: &mut calls_map, + visited_tys: &mut visited_tys, + visited_allocs: &mut visited_allocs, + }.visit_body(&body) + } + } + MonoItem::Static(def) => { + let inst = def_id_to_inst(tcx, def.def_id()); + for body in get_bodies(tcx, &inst).into_iter() { + InternedValueCollector { tcx, - link_map: &mut hash_map, - locals: body.locals() + _sym: inst.mangled_name(), + locals: &[], + link_map: &mut calls_map, + visited_tys: &mut visited_tys, + visited_allocs: &mut visited_allocs, }.visit_body(&body) } } - MonoItem::Static { .. } => {} - MonoItem::GlobalAsm { .. } => {} + MonoItem::GlobalAsm(_) => {} } } - let calls: Vec<_> = hash_map.into_iter().collect(); - // calls.sort_by(|fst,snd| rustc_internal::internal(tcx, fst.0.def_id()).cmp(rustc_internal::internal(tcx, snd.0.def_id()))); - calls + (calls_map, visited_allocs, visited_tys) } + // Collection Transitive Closure // ============================= @@ -463,7 +646,7 @@ impl MirVisitor for UnevaluatedConstCollector<'_,'_> { if let stable_mir::ty::ConstantKind::Unevaluated(uconst) = constant.kind() { let internal_def = rustc_internal::internal(self.tcx, uconst.def.def_id()); let internal_args = rustc_internal::internal(self.tcx, uconst.args.clone()); - let maybe_inst = rustc_middle::ty::Instance::try_resolve(self.tcx, ParamEnv::reveal_all(), internal_def, internal_args); + let maybe_inst = rustc_middle::ty::Instance::try_resolve(self.tcx, TypingEnv::post_analysis(self.tcx, internal_def), internal_def, internal_args); let inst = maybe_inst.ok().flatten().expect(format!("Failed to resolve mono item for {:?}", uconst).as_str()); let internal_mono_item = rustc_middle::mir::mono::MonoItem::Fn(inst); let item_name = mono_item_name_int(self.tcx, &internal_mono_item); @@ -517,19 +700,6 @@ fn collect_unevaluated_constant_items(tcx: TyCtxt<'_>, items: HashMap, opts: String) -> Vec { - let collect_all = opts == "ALL"; - let main_instance = stable_mir::entry_fn().map(|main_fn| Instance::try_from(main_fn).ok()).flatten(); - let initial_mono_items: Vec = filter_crate_items(tcx, |_, instance| { - let def_id = rustc_internal::internal(tcx, instance.def.def_id()); - Some(instance) == main_instance || (collect_all && tcx.is_reachable_non_generic(def_id)) - }) - .into_iter() - .map(MonoItem::Fn) - .collect(); - collect_all_mono_items(tcx, &initial_mono_items) -} - fn mono_collect(tcx: TyCtxt<'_>) -> Vec { let units = tcx.collect_and_partition_mono_items(()).1; units.iter().flat_map(|unit| { @@ -539,11 +709,7 @@ fn mono_collect(tcx: TyCtxt<'_>) -> Vec { fn collect_items(tcx: TyCtxt<'_>) -> HashMap { // get initial set of mono_items - let items = if let Ok(opts) = std::env::var("USE_KANI_PORT") { - kani_collect(tcx, opts) - } else { - mono_collect(tcx) - }; + let items = mono_collect(tcx); items.iter().map(|item| { let name = mono_item_name(tcx, item); ( name.clone(), mk_item(tcx, item.clone(), name) ) @@ -556,22 +722,39 @@ fn collect_items(tcx: TyCtxt<'_>) -> HashMap { fn emit_smir_internal(tcx: TyCtxt<'_>, writer: &mut dyn io::Write) { let local_crate = stable_mir::local_crate(); let items = collect_items(tcx); - let (unevaluated_consts, items) = collect_unevaluated_constant_items(tcx, items); - let called_functions = collect_fn_calls(tcx, items.iter().map(|i| &i.mono_item).collect::>()); + let items_clone = items.clone(); + let (unevaluated_consts, mut items) = collect_unevaluated_constant_items(tcx, items); + let (calls_map, visited_allocs, visited_tys) = collect_interned_values(tcx, items.iter().map(|i| &i.mono_item).collect::>()); + + // FIXME: We dump extra static items here --- this should be handled better + for (_, alloc) in visited_allocs.iter() { + if let AllocInfo::Static(def) = alloc { + let mono_item = stable_mir::mir::mono::MonoItem::Fn(stable_mir::mir::mono::Instance::from(*def)); + let item_name = &mono_item_name(tcx, &mono_item); + if !items_clone.contains_key(item_name) { + println!("Items missing static with id {:?} and name {:?}", def, item_name); + items.push(mk_item(tcx, mono_item, item_name.clone())); + } + } + } + + let called_functions = calls_map.iter().map(|(k,(_,name))| (k,name)).collect::>(); + let allocs = visited_allocs.iter().collect::>(); let crate_id = tcx.stable_crate_id(LOCAL_CRATE).as_u64(); let json_items = serde_json::to_value(&items).expect("serde_json mono items to value failed"); write!(writer, "{{\"name\": {}, \"crate_id\": {}, \"allocs\": {}, \"functions\": {}, \"uneval_consts\": {}, \"items\": {}", serde_json::to_string(&local_crate.name).expect("serde_json string to json failed"), serde_json::to_string(&crate_id).expect("serde_json number to json failed"), - serde_json::to_string(&visited_alloc_ids()).expect("serde_json global allocs to json failed"), - serde_json::to_string(&called_functions.iter().map(|(k,(_,name))| (k,name)).collect::>()).expect("serde_json functions to json failed"), + serde_json::to_string(&allocs).expect("serde_json global allocs to json failed"), + serde_json::to_string(&called_functions).expect("serde_json functions to json failed"), serde_json::to_string(&unevaluated_consts).expect("serde_json unevaluated consts to json failed"), serde_json::to_string(&json_items).expect("serde_json mono items to json failed"), ).expect("Failed to write JSON to file"); if debug_enabled() { + let fn_sources = calls_map.iter().map(|(k,(source,_))| (k,source)).collect::>(); write!(writer, ",\"fn_sources\": {}, \"types\": {}, \"foreign_modules\": {}}}", - serde_json::to_string(&called_functions.iter().map(|(k,(source,_))| (k,source)).collect::>()).expect("serde_json functions failed"), - serde_json::to_string(&visited_tys()).expect("serde_json tys failed"), + serde_json::to_string(&fn_sources).expect("serde_json functions failed"), + serde_json::to_string(&visited_tys).expect("serde_json tys failed"), serde_json::to_string(&get_foreign_module_details()).expect("foreign_module serialization failed"), ).expect("Failed to write JSON to file"); } else { diff --git a/tests/integration/failing/array.rs b/tests/integration/failing/array.rs new file mode 100644 index 0000000..6c3102e --- /dev/null +++ b/tests/integration/failing/array.rs @@ -0,0 +1,5 @@ +fn main() { + let a = [1, 2, 3, 4]; + + assert!(a == [1, 2, 3, 4]); +} \ No newline at end of file diff --git a/tests/integration/failing/array.smir.json.expected b/tests/integration/failing/array.smir.json.expected new file mode 100644 index 0000000..4f82c5c --- /dev/null +++ b/tests/integration/failing/array.smir.json.expected @@ -0,0 +1,2262 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 4, + 0, + 0, + 0 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 32, + 61, + 61, + 32, + 91, + 49, + 44, + 32, + 50, + 44, + 32, + 51, + 44, + 32, + 52, + 93 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN69_$LT$T$u20$as$u20$core..array..equality..SpecArrayEq$LT$U$C$_$GT$$GT$7spec_eq17h" + } + ], + [ + { + "IntrinsicSym": "raw_eq" + } + ], + [ + { + "NormalSym": "_ZN4core5array8equality103_$LT$impl$u20$core..cmp..PartialEq$LT$$u5b$U$u3b$$u20$N$u5d$$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 42, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 43 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 44 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 45, + "ty": 25 + }, + { + "mutability": "Not", + "span": 46, + "ty": 26 + }, + { + "mutability": "Not", + "span": 47, + "ty": 26 + } + ], + "span": 48, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 46 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 47 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 5, + "name": "std::array::equality::::eq" + } + }, + "symbol_name": "_ZN4core5array8equality103_$LT$impl$u20$core..cmp..PartialEq$LT$$u5b$U$u3b$$u20$N$u5d$$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 50, + "user_ty": null + } + } + } + ] + }, + "span": 50 + } + ], + "terminator": { + "kind": "Return", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 51, + "ty": 17 + }, + { + "mutability": "Not", + "span": 52, + "ty": 1 + } + ], + "span": 53, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 6, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Array": 16 + }, + [ + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 64, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 65, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 66, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 4, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 67, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 68 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 69 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 70, + "user_ty": null + } + } + } + ] + }, + "span": 70 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 63, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 63 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 63 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 71 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 18, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 30 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 17, + "kind": "ZeroSized", + "ty": 29 + }, + "span": 72, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 72 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 73, + "ty": 1 + }, + { + "mutability": "Not", + "span": 74, + "ty": 31 + }, + { + "mutability": "Mut", + "span": 63, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 69, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 70, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 72, + "ty": 32 + } + ], + "span": 75, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 74 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + }, + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Array": 16 + }, + [ + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 76, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 77, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 78, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 4, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 79, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 70 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 70 + } + ], + "terminator": { + "kind": "Return", + "span": 70 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 70, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 70, + "ty": 31 + } + ], + "span": 70, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 8, + "name": "main" + } + }, + "symbol_name": "_ZN5array4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 56 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + 26 + ] + } + ] + }, + "span": 56 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 54, + "user_ty": null + } + }, + "target": 1, + "unwind": "Unreachable" + } + }, + "span": 55 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 58 + } + ], + "terminator": { + "kind": "Return", + "span": 57 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 59, + "ty": 25 + }, + { + "mutability": "Not", + "span": 60, + "ty": 26 + }, + { + "mutability": "Not", + "span": 61, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 56, + "ty": 26 + } + ], + "span": 62, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "a", + "source_info": { + "scope": 0, + "span": 60 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "b", + "source_info": { + "scope": 0, + "span": 61 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": ">::spec_eq" + } + }, + "symbol_name": "_ZN69_$LT$T$u20$as$u20$core..array..equality..SpecArrayEq$LT$U$C$_$GT$$GT$7spec_eq17h" + } + ] +} diff --git a/tests/integration/failing/box.rs b/tests/integration/failing/box.rs new file mode 100644 index 0000000..1e93f66 --- /dev/null +++ b/tests/integration/failing/box.rs @@ -0,0 +1,9 @@ +fn main() { + let a = Box::new(5); + let b = Box::new(5); + + assert!(a == b); + assert!(*a == *b); + assert!(*a == 5); + // assert!(a == 5); // Not possible to equate Box::(Type) with Type +} \ No newline at end of file diff --git a/tests/integration/failing/box.smir.json.expected b/tests/integration/failing/box.smir.json.expected new file mode 100644 index 0000000..ae74cb3 --- /dev/null +++ b/tests/integration/failing/box.smir.json.expected @@ -0,0 +1,14446 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Not", + "provenance": { + "ptrs": [ + [ + 0, + 16 + ] + ] + } + } + } + ], + [ + { + "Memory": { + "align": 8, + "bytes": [], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Static": 56 + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 117, + 110, + 115, + 97, + 102, + 101, + 32, + 112, + 114, + 101, + 99, + 111, + 110, + 100, + 105, + 116, + 105, + 111, + 110, + 40, + 115, + 41, + 32, + 118, + 105, + 111, + 108, + 97, + 116, + 101, + 100, + 58, + 32, + 78, + 111, + 110, + 78, + 117, + 108, + 108, + 58, + 58, + 110, + 101, + 119, + 95, + 117, + 110, + 99, + 104, + 101, + 99, + 107, + 101, + 100, + 32, + 114, + 101, + 113, + 117, + 105, + 114, + 101, + 115, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 112, + 111, + 105, + 110, + 116, + 101, + 114, + 32, + 105, + 115, + 32, + 110, + 111, + 110, + 45, + 110, + 117, + 108, + 108 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 32, + 61, + 61, + 32, + 98 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 42, + 97, + 32, + 61, + 61, + 32, + 42, + 98 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 42, + 97, + 32, + 61, + 61, + 32, + 53 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 117, + 110, + 115, + 97, + 102, + 101, + 32, + 112, + 114, + 101, + 99, + 111, + 110, + 100, + 105, + 116, + 105, + 111, + 110, + 40, + 115, + 41, + 32, + 118, + 105, + 111, + 108, + 97, + 116, + 101, + 100, + 58, + 32, + 76, + 97, + 121, + 111, + 117, + 116, + 58, + 58, + 102, + 114, + 111, + 109, + 95, + 115, + 105, + 122, + 101, + 95, + 97, + 108, + 105, + 103, + 110, + 95, + 117, + 110, + 99, + 104, + 101, + 99, + 107, + 101, + 100, + 32, + 114, + 101, + 113, + 117, + 105, + 114, + 101, + 115, + 32, + 116, + 104, + 97, + 116, + 32, + 97, + 108, + 105, + 103, + 110, + 32, + 105, + 115, + 32, + 97, + 32, + 112, + 111, + 119, + 101, + 114, + 32, + 111, + 102, + 32, + 50, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 32, + 114, + 111, + 117, + 110, + 100, + 101, + 100, + 45, + 117, + 112, + 32, + 97, + 108, + 108, + 111, + 99, + 97, + 116, + 105, + 111, + 110, + 32, + 115, + 105, + 122, + 101, + 32, + 100, + 111, + 101, + 115, + 32, + 110, + 111, + 116, + 32, + 101, + 120, + 99, + 101, + 101, + 100, + 32, + 105, + 115, + 105, + 122, + 101, + 58, + 58, + 77, + 65, + 88 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 117, + 110, + 115, + 97, + 102, + 101, + 32, + 112, + 114, + 101, + 99, + 111, + 110, + 100, + 105, + 116, + 105, + 111, + 110, + 40, + 115, + 41, + 32, + 118, + 105, + 111, + 108, + 97, + 116, + 101, + 100, + 58, + 32, + 112, + 116, + 114, + 58, + 58, + 114, + 101, + 97, + 100, + 95, + 118, + 111, + 108, + 97, + 116, + 105, + 108, + 101, + 32, + 114, + 101, + 113, + 117, + 105, + 114, + 101, + 115, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 112, + 111, + 105, + 110, + 116, + 101, + 114, + 32, + 97, + 114, + 103, + 117, + 109, + 101, + 110, + 116, + 32, + 105, + 115, + 32, + 97, + 108, + 105, + 103, + 110, + 101, + 100, + 32, + 97, + 110, + 100, + 32, + 110, + 111, + 110, + 45, + 110, + 117, + 108, + 108 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 105, + 115, + 95, + 97, + 108, + 105, + 103, + 110, + 101, + 100, + 95, + 116, + 111, + 58, + 32, + 97, + 108, + 105, + 103, + 110, + 32, + 105, + 115, + 32, + 110, + 111, + 116, + 32, + 97, + 32, + 112, + 111, + 119, + 101, + 114, + 45, + 111, + 102, + 45, + 116, + 119, + 111 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "IntrinsicSym": "ctpop" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking14panic_nounwind17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking9panic_fmt17h" + } + ], + [ + { + "NormalSym": "_ZN72_$LT$alloc..boxed..Box$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17h" + } + ], + [ + { + "NormalSym": "_ZN4core5alloc6layout6Layout19is_size_align_valid17h" + } + ], + [ + { + "NormalSym": "__" + } + ], + [ + { + "NormalSym": "_ZN4core3ptr13read_volatile18precondition_check17h" + } + ], + [ + { + "IntrinsicSym": "volatile_load" + } + ], + [ + { + "NormalSym": "_ZN5alloc5alloc18handle_alloc_error17h" + } + ], + [ + { + "NormalSym": "_ZN4core5alloc6layout6Layout25from_size_align_unchecked18precondition_check17h" + } + ], + [ + { + "NormalSym": "_ZN5alloc5alloc6Global10alloc_impl17h" + } + ], + [ + { + "NormalSym": "" + } + ], + [ + { + "NormalSym": "_ZN5alloc5alloc12alloc_zeroed17h" + } + ], + [ + { + "NormalSym": "_ZN5alloc5alloc5alloc17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ptr8non_null16NonNull$LT$T$GT$13new_unchecked18precondition_check17h" + } + ], + [ + { + "NormalSym": "_ZN5alloc5alloc15exchange_malloc17h" + } + ], + [ + { + "NormalSym": "" + } + ], + [ + { + "NormalSym": "_ZN4core3cmp5impls54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$i32$GT$2eq17h" + } + ], + [ + { + "IntrinsicSym": "size_of_val" + } + ], + [ + { + "NormalSym": "_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT$10deallocate17h" + } + ], + [ + { + "IntrinsicSym": "min_align_of_val" + } + ], + [ + { + "NormalSym": "_ZN5alloc5boxed12Box$LT$T$GT$3new17h" + } + ], + [ + { + "NormalSym": "_ZN71_$LT$alloc..boxed..Box$LT$T$C$A$GT$$u20$as$u20$core..cmp..PartialEq$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ], + [ + { + "NoOpSym": "" + } + ], + [ + { + "NormalSym": "_ZN4core3ptr49drop_in_place$LT$alloc..boxed..Box$LT$i32$GT$$GT$17h" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 50, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 5, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 376, + "user_ty": null + } + } + ], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 49, + "kind": "ZeroSized", + "ty": 90 + }, + "span": 375, + "user_ty": 0 + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 377 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 50, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 5, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 379, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 49, + "kind": "ZeroSized", + "ty": 90 + }, + "span": 378, + "user_ty": 1 + } + }, + "target": 2, + "unwind": { + "Cleanup": 13 + } + } + }, + "span": 380 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 382 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [] + } + ] + } + ] + }, + "span": 383 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + }, + { + "Move": { + "local": 5, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 51, + "kind": "ZeroSized", + "ty": 91 + }, + "span": 381, + "user_ty": null + } + }, + "target": 3, + "unwind": { + "Cleanup": 12 + } + } + }, + "span": 381 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 3, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 5 + ] + ], + "otherwise": 4 + } + } + }, + "span": 381 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 0, + 40 + ] + }, + { + "Field": [ + 0, + 41 + ] + }, + { + "Field": [ + 0, + 42 + ] + } + ] + } + } + } + ] + }, + "span": 384 + }, + { + "kind": { + "Assign": [ + { + "local": 28, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + 36 + ] + } + ] + }, + "span": 384 + }, + { + "kind": { + "Assign": [ + { + "local": 29, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 28, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 384 + }, + { + "kind": { + "Assign": [ + { + "local": 30, + "projection": [] + }, + { + "NullaryOp": [ + "AlignOf", + 16 + ] + } + ] + }, + "span": 384 + }, + { + "kind": { + "Assign": [ + { + "local": 31, + "projection": [] + }, + { + "BinaryOp": [ + "Sub", + { + "Copy": { + "local": 30, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 384, + "user_ty": null + } + } + ] + } + ] + }, + "span": 384 + }, + { + "kind": { + "Assign": [ + { + "local": 32, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Copy": { + "local": 29, + "projection": [] + } + }, + { + "Copy": { + "local": 31, + "projection": [] + } + } + ] + } + ] + }, + "span": 384 + }, + { + "kind": { + "Assign": [ + { + "local": 33, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 32, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 384, + "user_ty": null + } + } + ] + } + ] + }, + "span": 384 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Copy": { + "local": 33, + "projection": [] + } + }, + "expected": true, + "msg": { + "MisalignedPointerDereference": { + "found": { + "Copy": { + "local": 29, + "projection": [] + } + }, + "required": { + "Copy": { + "local": 30, + "projection": [] + } + } + } + }, + "target": 17, + "unwind": "Unreachable" + } + }, + "span": 384 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 53, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 7 + ] + ] + } + } + }, + "ty": 28 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 6, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 52, + "kind": "ZeroSized", + "ty": 92 + }, + "span": 385, + "user_ty": null + } + }, + "target": null, + "unwind": { + "Cleanup": 12 + } + } + }, + "span": 385 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 0, + 40 + ] + }, + { + "Field": [ + 0, + 41 + ] + }, + { + "Field": [ + 0, + 42 + ] + } + ] + } + } + } + ] + }, + "span": 386 + }, + { + "kind": { + "Assign": [ + { + "local": 16, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 15, + "projection": [] + } + }, + 36 + ] + } + ] + }, + "span": 386 + }, + { + "kind": { + "Assign": [ + { + "local": 17, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 16, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 386 + }, + { + "kind": { + "Assign": [ + { + "local": 18, + "projection": [] + }, + { + "NullaryOp": [ + "AlignOf", + 16 + ] + } + ] + }, + "span": 386 + }, + { + "kind": { + "Assign": [ + { + "local": 19, + "projection": [] + }, + { + "BinaryOp": [ + "Sub", + { + "Copy": { + "local": 18, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 386, + "user_ty": null + } + } + ] + } + ] + }, + "span": 386 + }, + { + "kind": { + "Assign": [ + { + "local": 20, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Copy": { + "local": 17, + "projection": [] + } + }, + { + "Copy": { + "local": 19, + "projection": [] + } + } + ] + } + ] + }, + "span": 386 + }, + { + "kind": { + "Assign": [ + { + "local": 21, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 20, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 386, + "user_ty": null + } + } + ] + } + ] + }, + "span": 386 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Copy": { + "local": 21, + "projection": [] + } + }, + "expected": true, + "msg": { + "MisalignedPointerDereference": { + "found": { + "Copy": { + "local": 17, + "projection": [] + } + }, + "required": { + "Copy": { + "local": 18, + "projection": [] + } + } + } + }, + "target": 15, + "unwind": "Unreachable" + } + }, + "span": 386 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 54, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 8 + ] + ] + } + } + }, + "ty": 28 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 10, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 52, + "kind": "ZeroSized", + "ty": 92 + }, + "span": 387, + "user_ty": null + } + }, + "target": null, + "unwind": { + "Cleanup": 12 + } + } + }, + "span": 387 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 2, + "projection": [] + }, + "target": 10, + "unwind": { + "Cleanup": 13 + } + } + }, + "span": 388 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 55, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 9 + ] + ] + } + } + }, + "ty": 28 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 12, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 52, + "kind": "ZeroSized", + "ty": 92 + }, + "span": 389, + "user_ty": null + } + }, + "target": null, + "unwind": { + "Cleanup": 12 + } + } + }, + "span": 389 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 11, + "unwind": "Continue" + } + }, + "span": 388 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 390 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 2, + "projection": [] + }, + "target": 13, + "unwind": "Terminate" + } + }, + "span": 388 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 14, + "unwind": "Terminate" + } + }, + "span": 388 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 391 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 15, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 386 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 11, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 5, + 8 + ] + ], + "otherwise": 9 + } + } + }, + "span": 392 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 14, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 394 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 8, + "projection": [] + } + }, + { + "Move": { + "local": 9, + "projection": [] + } + } + ] + } + ] + }, + "span": 393 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 7, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 7 + ] + ], + "otherwise": 6 + } + } + }, + "span": 393 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 13, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 384 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 40 + ] + }, + { + "Field": [ + 0, + 41 + ] + }, + { + "Field": [ + 0, + 42 + ] + } + ] + } + } + } + ] + }, + "span": 394 + }, + { + "kind": { + "Assign": [ + { + "local": 22, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 14, + "projection": [] + } + }, + 36 + ] + } + ] + }, + "span": 394 + }, + { + "kind": { + "Assign": [ + { + "local": 23, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 22, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 394 + }, + { + "kind": { + "Assign": [ + { + "local": 24, + "projection": [] + }, + { + "NullaryOp": [ + "AlignOf", + 16 + ] + } + ] + }, + "span": 394 + }, + { + "kind": { + "Assign": [ + { + "local": 25, + "projection": [] + }, + { + "BinaryOp": [ + "Sub", + { + "Copy": { + "local": 24, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 394, + "user_ty": null + } + } + ] + } + ] + }, + "span": 394 + }, + { + "kind": { + "Assign": [ + { + "local": 26, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Copy": { + "local": 23, + "projection": [] + } + }, + { + "Copy": { + "local": 25, + "projection": [] + } + } + ] + } + ] + }, + "span": 394 + }, + { + "kind": { + "Assign": [ + { + "local": 27, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 26, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 394, + "user_ty": null + } + } + ] + } + ] + }, + "span": 394 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Copy": { + "local": 27, + "projection": [] + } + }, + "expected": true, + "msg": { + "MisalignedPointerDereference": { + "found": { + "Copy": { + "local": 23, + "projection": [] + } + }, + "required": { + "Copy": { + "local": 24, + "projection": [] + } + } + } + }, + "target": 16, + "unwind": "Unreachable" + } + }, + "span": 394 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 395, + "ty": 1 + }, + { + "mutability": "Not", + "span": 396, + "ty": 79 + }, + { + "mutability": "Not", + "span": 397, + "ty": 79 + }, + { + "mutability": "Mut", + "span": 381, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 382, + "ty": 82 + }, + { + "mutability": "Mut", + "span": 383, + "ty": 82 + }, + { + "mutability": "Mut", + "span": 385, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 393, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 384, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 394, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 387, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 386, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 389, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 396, + "ty": 42 + }, + { + "mutability": "Mut", + "span": 397, + "ty": 42 + }, + { + "mutability": "Mut", + "span": 396, + "ty": 42 + }, + { + "mutability": "Mut", + "span": 386, + "ty": 36 + }, + { + "mutability": "Mut", + "span": 386, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 386, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 386, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 386, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 386, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 394, + "ty": 36 + }, + { + "mutability": "Mut", + "span": 394, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 394, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 394, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 394, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 394, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 384, + "ty": 36 + }, + { + "mutability": "Mut", + "span": 384, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 384, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 384, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 384, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 384, + "ty": 20 + } + ], + "span": 391, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 396 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 397 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 25, + "name": "main" + } + }, + "symbol_name": "_ZN3box4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 41 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 41 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 42 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 42 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ] + } + ] + }, + "span": 43 + }, + { + "kind": { + "StorageDead": 4 + }, + "span": 44 + }, + { + "kind": { + "StorageDead": 3 + }, + "span": 44 + } + ], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 45, + "ty": 20 + }, + { + "mutability": "Not", + "span": 46, + "ty": 21 + }, + { + "mutability": "Not", + "span": 47, + "ty": 21 + }, + { + "mutability": "Mut", + "span": 41, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 42, + "ty": 16 + } + ], + "span": 48, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 46 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 47 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 3, + "name": "std::cmp::impls::::eq" + } + }, + "symbol_name": "_ZN4core3cmp5impls54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$i32$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 49, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 16 + }, + { + "mutability": "Not", + "span": 49, + "ty": 23 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 1 + }, + { + "mutability": "Not", + "span": 49, + "ty": 7 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 49, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 16 + }, + { + "mutability": "Not", + "span": 49, + "ty": 12 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + }, + { + "mutability": "Not", + "span": 49, + "ty": 25 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 3, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 4 + }, + "span": 52 + }, + { + "kind": { + "StorageLive": 10 + }, + "span": 53 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 54 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 12, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 50, + "user_ty": null + } + }, + "target": 9, + "unwind": "Unreachable" + } + }, + "span": 51 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 56 + } + ], + "terminator": { + "kind": "Return", + "span": 55 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 110, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 28 + }, + "span": 58, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 57, + "user_ty": null + } + }, + "target": null, + "unwind": "Unreachable" + } + }, + "span": 59 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 9 + }, + "span": 61 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 3, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 6 + ] + ], + "otherwise": 5 + } + } + }, + "span": 60 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 9 + }, + "span": 61 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 2 + } + }, + "span": 52 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 10 + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 1 + } + }, + "span": 52 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 6 + }, + "span": 62 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 10, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 63, + "user_ty": null + } + } + ] + } + ] + }, + "span": 64 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "UnaryOp": [ + "Not", + { + "Move": { + "local": 6, + "projection": [] + } + } + ] + } + ] + }, + "span": 65 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 66 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 4, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 1 + } + } + }, + "span": 52 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 12 + }, + "span": 67 + }, + { + "kind": { + "StorageLive": 9 + }, + "span": 68 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 69 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 70 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "BinaryOp": [ + "Sub", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 71, + "user_ty": null + } + } + ] + } + ] + }, + "span": 70 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Copy": { + "local": 10, + "projection": [] + } + }, + { + "Move": { + "local": 11, + "projection": [] + } + } + ] + } + ] + }, + "span": 68 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 72 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 9, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 4 + } + } + }, + "span": 61 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 12 + }, + "span": 67 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 75 + }, + { + "kind": { + "StorageLive": 13 + }, + "span": 76 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 31 + }, + "span": 77, + "user_ty": null + } + }, + 32 + ] + } + ] + }, + "span": 76 + }, + { + "kind": { + "StorageLive": 14 + }, + "span": 78 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 2 + ] + ] + } + } + }, + "ty": 33 + }, + "span": 78, + "user_ty": null + } + }, + 34 + ] + } + ] + }, + "span": 78 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 6, + 0, + [ + { + "Lifetime": { + "kind": "ReErased" + } + } + ], + null, + null + ] + }, + [ + { + "Move": { + "local": 13, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + null, + null, + null, + null, + null + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 35 + }, + "span": 29, + "user_ty": null + } + }, + { + "Move": { + "local": 14, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 79 + }, + { + "kind": { + "StorageDead": 14 + }, + "span": 80 + }, + { + "kind": { + "StorageDead": 13 + }, + "span": 80 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 8, + "projection": [] + } + } + ], + "destination": { + "local": 7, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 13, + "kind": "ZeroSized", + "ty": 30 + }, + "span": 73, + "user_ty": null + } + }, + "target": null, + "unwind": "Terminate" + } + }, + "span": 74 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 12, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 1, + 7 + ] + ], + "otherwise": 8 + } + } + }, + "span": 67 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 81, + "ty": 1 + }, + { + "mutability": "Not", + "span": 82, + "ty": 36 + }, + { + "mutability": "Not", + "span": 82, + "ty": 29 + }, + { + "mutability": "Not", + "span": 82, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 20 + }, + { + "mutability": "Not", + "span": 59, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 62, + "ty": 20 + }, + { + "mutability": "Not", + "span": 74, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 75, + "ty": 38 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 83, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 70, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 39 + }, + { + "mutability": "Mut", + "span": 76, + "ty": 32 + }, + { + "mutability": "Mut", + "span": 78, + "ty": 34 + } + ], + "span": 96, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "addr", + "source_info": { + "scope": 0, + "span": 82 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 0, + "span": 82 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "is_zst", + "source_info": { + "scope": 0, + "span": 82 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 1, + "span": 84 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 1, + "span": 85 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "is_zst", + "source_info": { + "scope": 1, + "span": 86 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 2, + "span": 87 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 2, + "span": 87 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "is_zst", + "source_info": { + "scope": 2, + "span": 87 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 3, + "span": 88 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 3, + "span": 89 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 4, + "span": 90 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 5, + "span": 91 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 6, + "span": 92 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 7, + "span": 93 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "pieces", + "source_info": { + "scope": 8, + "span": 94 + }, + "value": { + "Const": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 31 + }, + "span": 77, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 9, + "span": 95 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 5, + "name": "std::ptr::read_volatile::precondition_check" + } + }, + "symbol_name": "_ZN4core3ptr13read_volatile18precondition_check17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "CopyForDeref": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 40 + ] + }, + { + "Field": [ + 0, + 41 + ] + }, + { + "Field": [ + 0, + 42 + ] + } + ] + } + } + ] + }, + "span": 97 + } + ], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 6, + "projection": [ + "Deref" + ] + }, + "target": 3, + "unwind": { + "Cleanup": 4 + } + } + }, + "span": 97 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 97 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 97 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 97 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 17, + "kind": "ZeroSized", + "ty": 43 + }, + "span": 97, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 97 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 97 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 17, + "kind": "ZeroSized", + "ty": 43 + }, + "span": 97, + "user_ty": null + } + }, + "target": 1, + "unwind": "Terminate" + } + }, + "span": 97 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 97, + "ty": 1 + }, + { + "mutability": "Not", + "span": 97, + "ty": 44 + }, + { + "mutability": "Mut", + "span": 97, + "ty": 45 + }, + { + "mutability": "Mut", + "span": 97, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 97, + "ty": 45 + }, + { + "mutability": "Mut", + "span": 97, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 97, + "ty": 42 + } + ], + "span": 97, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 7, + "name": "std::ptr::drop_in_place::>" + } + }, + "symbol_name": "_ZN4core3ptr49drop_in_place$LT$alloc..boxed..Box$LT$i32$GT$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 97 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 97, + "ty": 1 + }, + { + "mutability": "Not", + "span": 97, + "ty": 23 + } + ], + "span": 97, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 7, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 99 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 69 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 3, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 1 + ] + ], + "otherwise": 2 + } + } + }, + "span": 98 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 98 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 18, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 93, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 3 + ] + ] + } + } + }, + "ty": 28 + }, + "span": 101, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 100, + "user_ty": null + } + }, + "target": null, + "unwind": "Unreachable" + } + }, + "span": 102 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 98 + } + ], + "terminator": { + "kind": "Return", + "span": 103 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 104, + "ty": 1 + }, + { + "mutability": "Not", + "span": 105, + "ty": 46 + }, + { + "mutability": "Not", + "span": 102, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 99, + "ty": 29 + } + ], + "span": 107, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 0, + "span": 105 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 106 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 8, + "name": "std::ptr::NonNull::::new_unchecked::precondition_check" + } + }, + "symbol_name": "_ZN4core3ptr8non_null16NonNull$LT$T$GT$13new_unchecked18precondition_check17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 109 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 19, + "kind": "ZeroSized", + "ty": 47 + }, + "span": 108, + "user_ty": null + } + }, + "target": 1, + "unwind": "Terminate" + } + }, + "span": 109 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 3, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 109 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 111 + } + ], + "terminator": { + "kind": "Return", + "span": 110 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 164, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 4 + ] + ] + } + } + }, + "ty": 28 + }, + "span": 113, + "user_ty": null + } + } + ], + "destination": { + "local": 4, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 112, + "user_ty": null + } + }, + "target": null, + "unwind": "Unreachable" + } + }, + "span": 114 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 115, + "ty": 1 + }, + { + "mutability": "Not", + "span": 116, + "ty": 29 + }, + { + "mutability": "Not", + "span": 116, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 109, + "ty": 20 + }, + { + "mutability": "Not", + "span": 114, + "ty": 37 + } + ], + "span": 117, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "size", + "source_info": { + "scope": 0, + "span": 116 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 0, + "span": 116 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 9, + "name": "std::alloc::Layout::from_size_align_unchecked::precondition_check" + } + }, + "symbol_name": "_ZN4core5alloc6layout6Layout25from_size_align_unchecked18precondition_check17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 119, + "user_ty": null + } + } + } + ] + }, + "span": 119 + } + ], + "terminator": { + "kind": "Return", + "span": 118 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 120, + "ty": 17 + }, + { + "mutability": "Not", + "span": 121, + "ty": 1 + } + ], + "span": 122, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 10, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 124 + }, + { + "kind": { + "StorageLive": 7 + }, + "span": 123 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "NullaryOp": [ + "UbChecks", + 20 + ] + } + ] + }, + "span": 125 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 7, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 5 + ] + ], + "otherwise": 3 + } + } + }, + "span": 123 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 5 + }, + "span": 127 + }, + { + "kind": { + "StorageDead": 3 + }, + "span": 127 + } + ], + "terminator": { + "kind": "Return", + "span": 126 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 2 + }, + "span": 130 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 131 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 132 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 132 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 0, + 29 + ] + } + ] + } + } + } + ] + }, + "span": 133 + }, + { + "kind": { + "StorageDead": 4 + }, + "span": 134 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 135 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 136 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 136 + }, + { + "kind": { + "StorageLive": 10 + }, + "span": 137 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 1, + 49 + ] + } + ] + } + } + } + ] + }, + "span": 137 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 13 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 14 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 15 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 139 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 10, + "projection": [ + { + "Field": [ + 0, + 50 + ] + } + ] + } + } + } + ] + }, + "span": 139 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Discriminant": { + "local": 11, + "projection": [] + } + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "BinaryOp": [ + "Ge", + { + "Copy": { + "local": 12, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 51 + }, + "span": 140, + "user_ty": null + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "BinaryOp": [ + "Le", + { + "Copy": { + "local": 12, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 24, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 51 + }, + "span": 140, + "user_ty": null + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Move": { + "local": 13, + "projection": [] + } + }, + { + "Move": { + "local": 14, + "projection": [] + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Intrinsic": { + "Assume": { + "Move": { + "local": 15, + "projection": [] + } + } + } + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Copy": { + "local": 12, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 141 + }, + { + "kind": { + "StorageDead": 15 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 14 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 13 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 12 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 142 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 143 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 5, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 22, + "kind": "ZeroSized", + "ty": 48 + }, + "span": 128, + "user_ty": null + } + }, + "target": 1, + "unwind": "Unreachable" + } + }, + "span": 129 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 9 + }, + "span": 147 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Constant": { + "const_": { + "id": 27, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 5 + ] + ] + } + } + }, + "ty": 53 + }, + "span": 29, + "user_ty": null + } + }, + 36 + ] + } + ] + }, + "span": 147 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 9, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 29, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 26, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 20 + }, + "span": 145, + "user_ty": null + } + } + ], + "destination": { + "local": 8, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 25, + "kind": "ZeroSized", + "ty": 52 + }, + "span": 144, + "user_ty": null + } + }, + "target": 4, + "unwind": "Unreachable" + } + }, + "span": 146 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 9 + }, + "span": 149 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 5 + } + }, + "span": 148 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 7 + }, + "span": 152 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 27, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 5 + ] + ] + } + } + }, + "ty": 53 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 28, + "kind": "ZeroSized", + "ty": 54 + }, + "span": 150, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 151 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 153, + "ty": 55 + }, + { + "mutability": "Not", + "span": 154, + "ty": 56 + }, + { + "mutability": "Not", + "span": 124, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 131, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 132, + "ty": 57 + }, + { + "mutability": "Mut", + "span": 135, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 136, + "ty": 57 + }, + { + "mutability": "Mut", + "span": 123, + "ty": 20 + }, + { + "mutability": "Not", + "span": 146, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 147, + "ty": 36 + }, + { + "mutability": "Mut", + "span": 137, + "ty": 49 + }, + { + "mutability": "Not", + "span": 139, + "ty": 50 + }, + { + "mutability": "Mut", + "span": 139, + "ty": 51 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + } + ], + "span": 159, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "layout", + "source_info": { + "scope": 0, + "span": 154 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "src", + "source_info": { + "scope": 1, + "span": 155 + }, + "value": { + "Const": { + "const_": { + "id": 27, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 5 + ] + ] + } + } + }, + "ty": 53 + }, + "span": 156, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 5, + "span": 157 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 6, + "span": 158 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + } + ] + } + ], + "id": 11, + "name": "std::alloc::alloc_zeroed" + } + }, + "symbol_name": "_ZN5alloc5alloc12alloc_zeroed17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 8 + }, + "span": 160 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "NullaryOp": [ + "UbChecks", + 20 + ] + } + ] + }, + "span": 160 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 8, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 5 + ] + ], + "otherwise": 4 + } + } + }, + "span": 160 + } + }, + { + "statements": [], + "terminator": { + "kind": "Unreachable", + "span": 161 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 7, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 29, + "kind": "ZeroSized", + "ty": 58 + }, + "span": 162, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 163 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 4, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 59 + ] + } + ] + } + } + } + ] + }, + "span": 165 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 166 + }, + { + "kind": { + "StorageLive": 13 + }, + "span": 167 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 168 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 6, + "projection": [] + } + }, + 60 + ] + } + ] + }, + "span": 169 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + 53 + ] + } + ] + }, + "span": 168 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 13, + 0, + [ + { + "Type": 9 + } + ], + null, + null + ] + }, + [ + { + "Move": { + "local": 12, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 170 + }, + { + "kind": { + "StorageDead": 12 + }, + "span": 171 + }, + { + "kind": { + "StorageDead": 13 + }, + "span": 167 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 11, + "projection": [] + } + }, + 55 + ] + } + ] + }, + "span": 169 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 172 + }, + { + "kind": { + "StorageDead": 4 + }, + "span": 173 + } + ], + "terminator": { + "kind": "Return", + "span": 164 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 9, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 30, + "kind": "ZeroSized", + "ty": 61 + }, + "span": 174, + "user_ty": null + } + }, + "target": 5, + "unwind": "Unreachable" + } + }, + "span": 175 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 8 + }, + "span": 180 + }, + { + "kind": { + "StorageLive": 10 + }, + "span": 181 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + 49 + ] + } + ] + }, + "span": 181 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 14, + 0, + [], + null, + null + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 10, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 182 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 183 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 161 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 32, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 6 + ] + ] + } + } + }, + "ty": 63 + }, + "span": 177, + "user_ty": null + } + }, + { + "Copy": { + "local": 3, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 26, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 20 + }, + "span": 178, + "user_ty": null + } + } + ], + "destination": { + "local": 4, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 31, + "kind": "ZeroSized", + "ty": 62 + }, + "span": 176, + "user_ty": null + } + }, + "target": 6, + "unwind": "Continue" + } + }, + "span": 179 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Discriminant": { + "local": 4, + "projection": [] + } + } + ] + }, + "span": 161 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 5, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ], + [ + 1, + 2 + ] + ], + "otherwise": 1 + } + } + }, + "span": 184 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 185, + "ty": 55 + }, + { + "mutability": "Not", + "span": 186, + "ty": 29 + }, + { + "mutability": "Not", + "span": 187, + "ty": 29 + }, + { + "mutability": "Not", + "span": 188, + "ty": 56 + }, + { + "mutability": "Mut", + "span": 161, + "ty": 64 + }, + { + "mutability": "Mut", + "span": 189, + "ty": 6 + }, + { + "mutability": "Not", + "span": 165, + "ty": 59 + }, + { + "mutability": "Mut", + "span": 163, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 160, + "ty": 20 + }, + { + "mutability": "Not", + "span": 175, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 181, + "ty": 49 + }, + { + "mutability": "Mut", + "span": 166, + "ty": 65 + }, + { + "mutability": "Mut", + "span": 168, + "ty": 53 + }, + { + "mutability": "Mut", + "span": 190, + "ty": 60 + } + ], + "span": 196, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "size", + "source_info": { + "scope": 0, + "span": 186 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 0, + "span": 187 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "layout", + "source_info": { + "scope": 1, + "span": 188 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 2, + "span": 165 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "size", + "source_info": { + "scope": 3, + "span": 191 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 3, + "span": 192 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 4, + "span": 193 + }, + "value": { + "Const": { + "const_": { + "id": 32, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 6 + ] + ] + } + } + }, + "ty": 63 + }, + "span": 177, + "user_ty": null + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "layout", + "source_info": { + "scope": 4, + "span": 194 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 5, + "span": 195 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + } + ] + }, + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 15, + 0, + [], + null, + null + ] + }, + [] + ] + } + ] + }, + "span": 177 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 177 + } + ], + "terminator": { + "kind": "Return", + "span": 177 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 177, + "ty": 63 + }, + { + "mutability": "Mut", + "span": 177, + "ty": 66 + } + ], + "span": 177, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 12, + "name": "alloc::alloc::exchange_malloc" + } + }, + "symbol_name": "_ZN5alloc5alloc15exchange_malloc17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 197 + }, + { + "kind": { + "StorageLive": 7 + }, + "span": 123 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "NullaryOp": [ + "UbChecks", + 20 + ] + } + ] + }, + "span": 125 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 7, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 5 + ] + ], + "otherwise": 3 + } + } + }, + "span": 123 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 5 + }, + "span": 199 + }, + { + "kind": { + "StorageDead": 3 + }, + "span": 199 + } + ], + "terminator": { + "kind": "Return", + "span": 198 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 2 + }, + "span": 202 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 203 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 204 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 204 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 0, + 29 + ] + } + ] + } + } + } + ] + }, + "span": 133 + }, + { + "kind": { + "StorageDead": 4 + }, + "span": 205 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 206 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 207 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 207 + }, + { + "kind": { + "StorageLive": 10 + }, + "span": 137 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 1, + 49 + ] + } + ] + } + } + } + ] + }, + "span": 137 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 13 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 14 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 15 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 139 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 10, + "projection": [ + { + "Field": [ + 0, + 50 + ] + } + ] + } + } + } + ] + }, + "span": 139 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Discriminant": { + "local": 11, + "projection": [] + } + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "BinaryOp": [ + "Ge", + { + "Copy": { + "local": 12, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 51 + }, + "span": 140, + "user_ty": null + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "BinaryOp": [ + "Le", + { + "Copy": { + "local": 12, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 24, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 51 + }, + "span": 140, + "user_ty": null + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Move": { + "local": 13, + "projection": [] + } + }, + { + "Move": { + "local": 14, + "projection": [] + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Intrinsic": { + "Assume": { + "Move": { + "local": 15, + "projection": [] + } + } + } + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Copy": { + "local": 12, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 141 + }, + { + "kind": { + "StorageDead": 15 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 14 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 13 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 12 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 142 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 208 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 5, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 33, + "kind": "ZeroSized", + "ty": 67 + }, + "span": 200, + "user_ty": null + } + }, + "target": 1, + "unwind": "Unreachable" + } + }, + "span": 201 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 9 + }, + "span": 147 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Constant": { + "const_": { + "id": 27, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 5 + ] + ] + } + } + }, + "ty": 53 + }, + "span": 29, + "user_ty": null + } + }, + 36 + ] + } + ] + }, + "span": 147 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 9, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 29, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 26, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 20 + }, + "span": 145, + "user_ty": null + } + } + ], + "destination": { + "local": 8, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 25, + "kind": "ZeroSized", + "ty": 52 + }, + "span": 144, + "user_ty": null + } + }, + "target": 4, + "unwind": "Unreachable" + } + }, + "span": 146 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 9 + }, + "span": 149 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 5 + } + }, + "span": 148 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 7 + }, + "span": 152 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 27, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 5 + ] + ] + } + } + }, + "ty": 53 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 28, + "kind": "ZeroSized", + "ty": 54 + }, + "span": 150, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 151 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 209, + "ty": 55 + }, + { + "mutability": "Not", + "span": 210, + "ty": 56 + }, + { + "mutability": "Not", + "span": 197, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 203, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 204, + "ty": 57 + }, + { + "mutability": "Mut", + "span": 206, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 207, + "ty": 57 + }, + { + "mutability": "Mut", + "span": 123, + "ty": 20 + }, + { + "mutability": "Not", + "span": 146, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 147, + "ty": 36 + }, + { + "mutability": "Mut", + "span": 137, + "ty": 49 + }, + { + "mutability": "Not", + "span": 139, + "ty": 50 + }, + { + "mutability": "Mut", + "span": 139, + "ty": 51 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + } + ], + "span": 212, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "layout", + "source_info": { + "scope": 0, + "span": 210 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "src", + "source_info": { + "scope": 1, + "span": 155 + }, + "value": { + "Const": { + "const_": { + "id": 27, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 5 + ] + ] + } + } + }, + "ty": 53 + }, + "span": 211, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 5, + "span": 157 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 6, + "span": 158 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + } + ] + } + ], + "id": 16, + "name": "std::alloc::alloc" + } + }, + "symbol_name": "_ZN5alloc5alloc5alloc17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 3, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 214 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [] + } + ] + } + ] + }, + "span": 214 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 29 + ] + } + ] + } + } + } + ] + }, + "span": 133 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 215 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 4, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 1 + } + } + }, + "span": 213 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 9 + }, + "span": 217 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 3, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 4 + ] + ], + "otherwise": 3 + } + } + }, + "span": 216 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 6 + }, + "span": 219 + }, + { + "kind": { + "StorageLive": 7 + }, + "span": 220 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 221 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [] + } + ] + } + ] + }, + "span": 221 + }, + { + "kind": { + "StorageLive": 16 + }, + "span": 222 + }, + { + "kind": { + "StorageLive": 17 + }, + "span": 223 + }, + { + "kind": { + "StorageLive": 18 + }, + "span": 137 + }, + { + "kind": { + "Assign": [ + { + "local": 18, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 1, + 49 + ] + } + ] + } + } + } + ] + }, + "span": 137 + }, + { + "kind": { + "StorageLive": 20 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 21 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 22 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 23 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 19 + }, + "span": 139 + }, + { + "kind": { + "Assign": [ + { + "local": 19, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 18, + "projection": [ + { + "Field": [ + 0, + 50 + ] + } + ] + } + } + } + ] + }, + "span": 139 + }, + { + "kind": { + "Assign": [ + { + "local": 20, + "projection": [] + }, + { + "Discriminant": { + "local": 19, + "projection": [] + } + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 21, + "projection": [] + }, + { + "BinaryOp": [ + "Ge", + { + "Copy": { + "local": 20, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 51 + }, + "span": 140, + "user_ty": null + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 22, + "projection": [] + }, + { + "BinaryOp": [ + "Le", + { + "Copy": { + "local": 20, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 24, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 51 + }, + "span": 140, + "user_ty": null + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 23, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Move": { + "local": 21, + "projection": [] + } + }, + { + "Move": { + "local": 22, + "projection": [] + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Intrinsic": { + "Assume": { + "Move": { + "local": 23, + "projection": [] + } + } + } + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 17, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Copy": { + "local": 20, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "StorageDead": 19 + }, + "span": 141 + }, + { + "kind": { + "StorageDead": 23 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 22 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 21 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 20 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 18 + }, + "span": 142 + }, + { + "kind": { + "Assign": [ + { + "local": 16, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 17, + "projection": [] + } + }, + 55 + ] + } + ] + }, + "span": 224 + }, + { + "kind": { + "StorageDead": 17 + }, + "span": 225 + }, + { + "kind": { + "StorageLive": 27 + }, + "span": 226 + }, + { + "kind": { + "Assign": [ + { + "local": 24, + "projection": [] + }, + { + "NullaryOp": [ + "UbChecks", + 20 + ] + } + ] + }, + "span": 125 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 24, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 9 + ] + ], + "otherwise": 7 + } + } + }, + "span": 218 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 9, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 34, + "kind": "ZeroSized", + "ty": 68 + }, + "span": 227, + "user_ty": null + } + }, + "target": 5, + "unwind": "Continue" + } + }, + "span": 228 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 9, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 35, + "kind": "ZeroSized", + "ty": 69 + }, + "span": 229, + "user_ty": null + } + }, + "target": 5, + "unwind": "Continue" + } + }, + "span": 230 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 10 + }, + "span": 232 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 233 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 234 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 9, + "projection": [] + } + } + } + ] + }, + "span": 235 + }, + { + "kind": { + "Assign": [ + { + "local": 34, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + 53 + ] + } + ] + }, + "span": 236 + }, + { + "kind": { + "StorageLive": 35 + }, + "span": 99 + }, + { + "kind": { + "Assign": [ + { + "local": 35, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 69 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 35, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 13 + ] + ], + "otherwise": 14 + } + } + }, + "span": 231 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 237 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 26 + }, + "span": 240 + }, + { + "kind": { + "Assign": [ + { + "local": 26, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 16, + "projection": [] + } + }, + 46 + ] + } + ] + }, + "span": 240 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 26, + "projection": [] + } + } + ], + "destination": { + "local": 25, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 36, + "kind": "ZeroSized", + "ty": 70 + }, + "span": 238, + "user_ty": null + } + }, + "target": 8, + "unwind": "Unreachable" + } + }, + "span": 239 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 26 + }, + "span": 241 + }, + { + "kind": { + "Assign": [ + { + "local": 27, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 16, + "projection": [] + } + }, + 53 + ] + } + ] + }, + "span": 242 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 13, + 0, + [ + { + "Type": 9 + } + ], + null, + null + ] + }, + [ + { + "Copy": { + "local": 27, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 243 + }, + { + "kind": { + "StorageDead": 27 + }, + "span": 226 + }, + { + "kind": { + "StorageDead": 16 + }, + "span": 244 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 245 + }, + { + "kind": { + "StorageLive": 29 + }, + "span": 219 + }, + { + "kind": { + "StorageLive": 28 + }, + "span": 246 + }, + { + "kind": { + "Assign": [ + { + "local": 29, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 55 + ] + } + ] + }, + "span": 169 + }, + { + "kind": { + "Assign": [ + { + "local": 28, + "projection": [] + }, + { + "Aggregate": [ + { + "RawPtr": [ + 71, + "Mut" + ] + }, + [ + { + "Copy": { + "local": 29, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 29, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 247 + }, + { + "kind": { + "StorageLive": 32 + }, + "span": 248 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 10 + } + }, + "span": 218 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 27, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 16, + "projection": [] + } + }, + 53 + ] + } + ] + }, + "span": 242 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 13, + 0, + [ + { + "Type": 9 + } + ], + null, + null + ] + }, + [ + { + "Copy": { + "local": 27, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 243 + }, + { + "kind": { + "StorageDead": 27 + }, + "span": 226 + }, + { + "kind": { + "StorageDead": 16 + }, + "span": 244 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 245 + }, + { + "kind": { + "StorageLive": 29 + }, + "span": 219 + }, + { + "kind": { + "StorageLive": 28 + }, + "span": 246 + }, + { + "kind": { + "Assign": [ + { + "local": 29, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 55 + ] + } + ] + }, + "span": 169 + }, + { + "kind": { + "Assign": [ + { + "local": 28, + "projection": [] + }, + { + "Aggregate": [ + { + "RawPtr": [ + 71, + "Mut" + ] + }, + [ + { + "Copy": { + "local": 29, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 29, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 247 + }, + { + "kind": { + "StorageLive": 32 + }, + "span": 248 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 24, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 12 + ] + ], + "otherwise": 10 + } + } + }, + "span": 218 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 31 + }, + "span": 240 + }, + { + "kind": { + "Assign": [ + { + "local": 31, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 29, + "projection": [] + } + }, + 46 + ] + } + ] + }, + "span": 240 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 31, + "projection": [] + } + } + ], + "destination": { + "local": 30, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 36, + "kind": "ZeroSized", + "ty": 70 + }, + "span": 238, + "user_ty": null + } + }, + "target": 11, + "unwind": "Unreachable" + } + }, + "span": 239 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 31 + }, + "span": 241 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 12 + } + }, + "span": 249 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 32, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 28, + "projection": [] + } + }, + 72 + ] + } + ] + }, + "span": 242 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 13, + 0, + [ + { + "Type": 71 + } + ], + null, + null + ] + }, + [ + { + "Copy": { + "local": 32, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 243 + }, + { + "kind": { + "StorageDead": 32 + }, + "span": 248 + }, + { + "kind": { + "StorageDead": 28 + }, + "span": 251 + }, + { + "kind": { + "StorageDead": 29 + }, + "span": 219 + }, + { + "kind": { + "StorageDead": 7 + }, + "span": 252 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 18, + 0, + [ + { + "Type": 59 + }, + { + "Type": 73 + } + ], + null, + null + ] + }, + [ + { + "Move": { + "local": 6, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 253 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 250 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 6 + } + }, + "span": 250 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 35 + }, + "span": 231 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 37, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 74 + }, + "span": 29, + "user_ty": null + } + } + } + ] + }, + "span": 254 + }, + { + "kind": { + "StorageLive": 39 + }, + "span": 255 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 38, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 75 + }, + "span": 29, + "user_ty": null + } + } + } + ] + }, + "span": 256 + }, + { + "kind": { + "StorageDead": 39 + }, + "span": 255 + }, + { + "kind": { + "StorageDead": 12 + }, + "span": 257 + }, + { + "kind": { + "StorageLive": 40 + }, + "span": 232 + }, + { + "kind": { + "StorageDead": 40 + }, + "span": 232 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 258 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 39, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + null, + null, + null, + null, + null + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 64 + }, + "span": 29, + "user_ty": null + } + } + } + ] + }, + "span": 259 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 260 + }, + { + "kind": { + "StorageDead": 9 + }, + "span": 261 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 6 + } + }, + "span": 237 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 35 + }, + "span": 231 + }, + { + "kind": { + "StorageLive": 33 + }, + "span": 262 + }, + { + "kind": { + "StorageLive": 36 + }, + "span": 218 + }, + { + "kind": { + "Assign": [ + { + "local": 36, + "projection": [] + }, + { + "NullaryOp": [ + "UbChecks", + 20 + ] + } + ] + }, + "span": 125 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 36, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 17 + ] + ], + "otherwise": 15 + } + } + }, + "span": 218 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 38 + }, + "span": 240 + }, + { + "kind": { + "Assign": [ + { + "local": 38, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + 46 + ] + } + ] + }, + "span": 240 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 38, + "projection": [] + } + } + ], + "destination": { + "local": 37, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 36, + "kind": "ZeroSized", + "ty": 70 + }, + "span": 238, + "user_ty": null + } + }, + "target": 16, + "unwind": "Unreachable" + } + }, + "span": 239 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 38 + }, + "span": 241 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 17 + } + }, + "span": 249 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 36 + }, + "span": 263 + }, + { + "kind": { + "Assign": [ + { + "local": 33, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 13, + 0, + [ + { + "Type": 9 + } + ], + null, + null + ] + }, + [ + { + "Copy": { + "local": 34, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 243 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 19, + 1, + [ + { + "Type": 65 + } + ], + null, + null + ] + }, + [ + { + "Move": { + "local": 33, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 264 + }, + { + "kind": { + "StorageDead": 33 + }, + "span": 265 + }, + { + "kind": { + "StorageLive": 39 + }, + "span": 255 + }, + { + "kind": { + "Assign": [ + { + "local": 39, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 12, + "projection": [ + { + "Downcast": 1 + }, + { + "Field": [ + 0, + 65 + ] + } + ] + } + } + } + ] + }, + "span": 266 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 18, + 0, + [ + { + "Type": 65 + }, + { + "Type": 73 + } + ], + null, + null + ] + }, + [ + { + "Copy": { + "local": 39, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 267 + }, + { + "kind": { + "StorageDead": 39 + }, + "span": 255 + }, + { + "kind": { + "StorageDead": 12 + }, + "span": 257 + }, + { + "kind": { + "StorageLive": 40 + }, + "span": 232 + }, + { + "kind": { + "Assign": [ + { + "local": 40, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 11, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 65 + ] + } + ] + } + } + } + ] + }, + "span": 268 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 20, + 0, + [ + { + "Type": 76 + }, + { + "Type": 65 + } + ], + null, + null + ] + }, + [ + { + "Copy": { + "local": 40, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 269 + }, + { + "kind": { + "StorageDead": 40 + }, + "span": 232 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 258 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 10, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 65 + ] + } + ] + } + } + } + ] + }, + "span": 270 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 260 + }, + { + "kind": { + "StorageLive": 15 + }, + "span": 271 + }, + { + "kind": { + "StorageLive": 42 + }, + "span": 271 + }, + { + "kind": { + "StorageLive": 41 + }, + "span": 246 + }, + { + "kind": { + "Assign": [ + { + "local": 42, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 14, + "projection": [] + } + }, + 55 + ] + } + ] + }, + "span": 169 + }, + { + "kind": { + "Assign": [ + { + "local": 41, + "projection": [] + }, + { + "Aggregate": [ + { + "RawPtr": [ + 71, + "Mut" + ] + }, + [ + { + "Copy": { + "local": 42, + "projection": [] + } + }, + { + "Copy": { + "local": 4, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 247 + }, + { + "kind": { + "StorageLive": 46 + }, + "span": 248 + }, + { + "kind": { + "StorageLive": 43 + }, + "span": 218 + }, + { + "kind": { + "Assign": [ + { + "local": 43, + "projection": [] + }, + { + "NullaryOp": [ + "UbChecks", + 20 + ] + } + ] + }, + "span": 125 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 43, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 20 + ] + ], + "otherwise": 18 + } + } + }, + "span": 218 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 45 + }, + "span": 240 + }, + { + "kind": { + "Assign": [ + { + "local": 45, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 42, + "projection": [] + } + }, + 46 + ] + } + ] + }, + "span": 240 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 45, + "projection": [] + } + } + ], + "destination": { + "local": 44, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 36, + "kind": "ZeroSized", + "ty": 70 + }, + "span": 238, + "user_ty": null + } + }, + "target": 19, + "unwind": "Unreachable" + } + }, + "span": 239 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 45 + }, + "span": 241 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 20 + } + }, + "span": 249 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 43 + }, + "span": 263 + }, + { + "kind": { + "Assign": [ + { + "local": 46, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 41, + "projection": [] + } + }, + 72 + ] + } + ] + }, + "span": 242 + }, + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 13, + 0, + [ + { + "Type": 71 + } + ], + null, + null + ] + }, + [ + { + "Copy": { + "local": 46, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 243 + }, + { + "kind": { + "StorageDead": 46 + }, + "span": 248 + }, + { + "kind": { + "StorageDead": 41 + }, + "span": 251 + }, + { + "kind": { + "StorageDead": 42 + }, + "span": 271 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 18, + 0, + [ + { + "Type": 59 + }, + { + "Type": 73 + } + ], + null, + null + ] + }, + [ + { + "Move": { + "local": 15, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 272 + }, + { + "kind": { + "StorageDead": 15 + }, + "span": 273 + }, + { + "kind": { + "StorageDead": 9 + }, + "span": 261 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 6 + } + }, + "span": 261 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 274, + "ty": 64 + }, + { + "mutability": "Not", + "span": 275, + "ty": 63 + }, + { + "mutability": "Not", + "span": 276, + "ty": 56 + }, + { + "mutability": "Not", + "span": 277, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 278, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 214, + "ty": 57 + }, + { + "mutability": "Mut", + "span": 219, + "ty": 59 + }, + { + "mutability": "Mut", + "span": 220, + "ty": 65 + }, + { + "mutability": "Mut", + "span": 221, + "ty": 57 + }, + { + "mutability": "Not", + "span": 217, + "ty": 55 + }, + { + "mutability": "Mut", + "span": 232, + "ty": 77 + }, + { + "mutability": "Mut", + "span": 233, + "ty": 75 + }, + { + "mutability": "Mut", + "span": 234, + "ty": 74 + }, + { + "mutability": "Mut", + "span": 235, + "ty": 55 + }, + { + "mutability": "Not", + "span": 270, + "ty": 65 + }, + { + "mutability": "Mut", + "span": 271, + "ty": 59 + }, + { + "mutability": "Mut", + "span": 222, + "ty": 55 + }, + { + "mutability": "Mut", + "span": 223, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 137, + "ty": 49 + }, + { + "mutability": "Not", + "span": 139, + "ty": 50 + }, + { + "mutability": "Mut", + "span": 139, + "ty": 51 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 218, + "ty": 20 + }, + { + "mutability": "Not", + "span": 239, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 240, + "ty": 46 + }, + { + "mutability": "Mut", + "span": 242, + "ty": 53 + }, + { + "mutability": "Mut", + "span": 246, + "ty": 60 + }, + { + "mutability": "Mut", + "span": 279, + "ty": 55 + }, + { + "mutability": "Not", + "span": 239, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 240, + "ty": 46 + }, + { + "mutability": "Mut", + "span": 242, + "ty": 72 + }, + { + "mutability": "Mut", + "span": 262, + "ty": 65 + }, + { + "mutability": "Not", + "span": 280, + "ty": 53 + }, + { + "mutability": "Mut", + "span": 99, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 218, + "ty": 20 + }, + { + "mutability": "Not", + "span": 239, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 240, + "ty": 46 + }, + { + "mutability": "Not", + "span": 266, + "ty": 65 + }, + { + "mutability": "Not", + "span": 268, + "ty": 65 + }, + { + "mutability": "Mut", + "span": 246, + "ty": 60 + }, + { + "mutability": "Mut", + "span": 279, + "ty": 55 + }, + { + "mutability": "Mut", + "span": 218, + "ty": 20 + }, + { + "mutability": "Not", + "span": 239, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 240, + "ty": 46 + }, + { + "mutability": "Mut", + "span": 242, + "ty": 72 + } + ], + "span": 301, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 275 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "layout", + "source_info": { + "scope": 0, + "span": 276 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "zeroed", + "source_info": { + "scope": 0, + "span": 277 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "size", + "source_info": { + "scope": 1, + "span": 281 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "raw_ptr", + "source_info": { + "scope": 2, + "span": 217 + }, + "value": { + "Place": { + "local": 9, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 3, + "span": 282 + }, + "value": { + "Place": { + "local": 14, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "residual", + "source_info": { + "scope": 4, + "span": 283 + }, + "value": { + "Const": { + "const_": { + "id": 40, + "kind": "ZeroSized", + "ty": 76 + }, + "span": 29, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "val", + "source_info": { + "scope": 6, + "span": 270 + }, + "value": { + "Place": { + "local": 14, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 8, + "span": 157 + }, + "value": { + "Place": { + "local": 5, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 9, + "span": 284 + }, + "value": { + "Place": { + "local": 8, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 10, + "span": 158 + }, + "value": { + "Place": { + "local": 8, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "addr", + "source_info": { + "scope": 12, + "span": 285 + }, + "value": { + "Place": { + "local": 17, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 13, + "span": 286 + }, + "value": { + "Place": { + "local": 16, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "data", + "source_info": { + "scope": 16, + "span": 287 + }, + "value": { + "Place": { + "local": 7, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "len", + "source_info": { + "scope": 16, + "span": 288 + }, + "value": { + "Const": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 289, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 17, + "span": 290 + }, + "value": { + "Place": { + "local": 7, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "data", + "source_info": { + "scope": 18, + "span": 291 + }, + "value": { + "Place": { + "local": 29, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "len", + "source_info": { + "scope": 18, + "span": 292 + }, + "value": { + "Const": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 289, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 20, + "span": 286 + }, + "value": { + "Place": { + "local": 28, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 23, + "span": 293 + }, + "value": { + "Place": { + "local": 13, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 24, + "span": 106 + }, + "value": { + "Place": { + "local": 13, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 31, + "span": 286 + }, + "value": { + "Place": { + "local": 13, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 34, + "span": 294 + }, + "value": { + "Place": { + "local": 12, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "err", + "source_info": { + "scope": 34, + "span": 295 + }, + "value": { + "Const": { + "const_": { + "id": 41, + "kind": "ZeroSized", + "ty": 73 + }, + "span": 29, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 35, + "span": 266 + }, + "value": { + "Place": { + "local": 39, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 36, + "span": 296 + }, + "value": { + "Place": { + "local": 11, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 37, + "span": 268 + }, + "value": { + "Place": { + "local": 40, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "e", + "source_info": { + "scope": 38, + "span": 297 + }, + "value": { + "Const": { + "const_": { + "id": 41, + "kind": "ZeroSized", + "ty": 73 + }, + "span": 29, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "data", + "source_info": { + "scope": 39, + "span": 287 + }, + "value": { + "Place": { + "local": 14, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "len", + "source_info": { + "scope": 39, + "span": 288 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 40, + "span": 290 + }, + "value": { + "Place": { + "local": 14, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "data", + "source_info": { + "scope": 41, + "span": 291 + }, + "value": { + "Place": { + "local": 42, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "len", + "source_info": { + "scope": 41, + "span": 292 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 43, + "span": 286 + }, + "value": { + "Place": { + "local": 41, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "residual", + "source_info": { + "scope": 46, + "span": 298 + }, + "value": { + "Const": { + "const_": { + "id": 40, + "kind": "ZeroSized", + "ty": 76 + }, + "span": 29, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "e", + "source_info": { + "scope": 47, + "span": 299 + }, + "value": { + "Const": { + "const_": { + "id": 41, + "kind": "ZeroSized", + "ty": 73 + }, + "span": 29, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "t", + "source_info": { + "scope": 48, + "span": 300 + }, + "value": { + "Const": { + "const_": { + "id": 41, + "kind": "ZeroSized", + "ty": 73 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 17, + "name": "std::alloc::Global::alloc_impl" + } + }, + "symbol_name": "_ZN5alloc5alloc6Global10alloc_impl17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "NullaryOp": [ + "SizeOf", + 16 + ] + } + ] + }, + "span": 302 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "NullaryOp": [ + "AlignOf", + 16 + ] + } + ] + }, + "span": 302 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 4, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 42, + "kind": "ZeroSized", + "ty": 78 + }, + "span": 302, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 2 + } + } + }, + "span": 302 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "ShallowInitBox": [ + { + "Move": { + "local": 4, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 302 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 0, + "projection": [ + { + "Field": [ + 0, + 40 + ] + }, + { + "Field": [ + 0, + 41 + ] + }, + { + "Field": [ + 0, + 42 + ] + } + ] + } + } + } + ] + }, + "span": 304 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [ + "Deref" + ] + }, + { + "Use": { + "Move": { + "local": 1, + "projection": [] + } + } + } + ] + }, + "span": 304 + } + ], + "terminator": { + "kind": "Return", + "span": 303 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 3, + "unwind": "Terminate" + } + }, + "span": 305 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 306 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 307, + "ty": 79 + }, + { + "mutability": "Not", + "span": 308, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 302, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 302, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 302, + "ty": 55 + }, + { + "mutability": "Mut", + "span": 302, + "ty": 42 + } + ], + "span": 306, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "x", + "source_info": { + "scope": 0, + "span": 308 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 21, + "name": "std::boxed::Box::::new" + } + }, + "symbol_name": "_ZN5alloc5boxed12Box$LT$T$GT$3new17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 3, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 310 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 3, + "projection": [] + } + ] + } + ] + }, + "span": 310 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 3, + "projection": [ + { + "Field": [ + 0, + 29 + ] + } + ] + } + } + } + ] + }, + "span": 133 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 311 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 4, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 1 + } + } + }, + "span": 309 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 6 + }, + "span": 314 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + 55 + ] + } + ] + }, + "span": 169 + }, + { + "kind": { + "StorageLive": 7 + }, + "span": 315 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 3, + "projection": [] + } + } + } + ] + }, + "span": 315 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 316 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 7, + "projection": [] + } + ] + } + ] + }, + "span": 316 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 317 + }, + { + "kind": { + "StorageLive": 9 + }, + "span": 318 + }, + { + "kind": { + "StorageLive": 10 + }, + "span": 319 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 7, + "projection": [] + } + ] + } + ] + }, + "span": 319 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 137 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 3, + "projection": [ + { + "Field": [ + 1, + 49 + ] + } + ] + } + } + } + ] + }, + "span": 137 + }, + { + "kind": { + "StorageLive": 13 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 14 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 15 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 16 + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 139 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 11, + "projection": [ + { + "Field": [ + 0, + 50 + ] + } + ] + } + } + } + ] + }, + "span": 139 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "Discriminant": { + "local": 12, + "projection": [] + } + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "BinaryOp": [ + "Ge", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 51 + }, + "span": 140, + "user_ty": null + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "BinaryOp": [ + "Le", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 24, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 51 + }, + "span": 140, + "user_ty": null + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 16, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Move": { + "local": 14, + "projection": [] + } + }, + { + "Move": { + "local": 15, + "projection": [] + } + } + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "Intrinsic": { + "Assume": { + "Move": { + "local": 16, + "projection": [] + } + } + } + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 140 + }, + { + "kind": { + "StorageDead": 12 + }, + "span": 141 + }, + { + "kind": { + "StorageDead": 16 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 15 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 14 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 13 + }, + "span": 138 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 142 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 320 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + }, + { + "Move": { + "local": 9, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 43, + "kind": "ZeroSized", + "ty": 80 + }, + "span": 312, + "user_ty": null + } + }, + "target": 3, + "unwind": "Unreachable" + } + }, + "span": 313 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 321 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 9 + }, + "span": 323 + }, + { + "kind": { + "StorageDead": 7 + }, + "span": 324 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 324 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 2 + } + }, + "span": 322 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 325, + "ty": 1 + }, + { + "mutability": "Not", + "span": 326, + "ty": 63 + }, + { + "mutability": "Not", + "span": 327, + "ty": 65 + }, + { + "mutability": "Not", + "span": 328, + "ty": 56 + }, + { + "mutability": "Mut", + "span": 329, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 310, + "ty": 57 + }, + { + "mutability": "Mut", + "span": 314, + "ty": 55 + }, + { + "mutability": "Mut", + "span": 315, + "ty": 56 + }, + { + "mutability": "Mut", + "span": 316, + "ty": 57 + }, + { + "mutability": "Mut", + "span": 318, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 319, + "ty": 57 + }, + { + "mutability": "Mut", + "span": 137, + "ty": 49 + }, + { + "mutability": "Not", + "span": 139, + "ty": 50 + }, + { + "mutability": "Mut", + "span": 139, + "ty": 51 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 20 + } + ], + "span": 332, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 326 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 0, + "span": 327 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "layout", + "source_info": { + "scope": 0, + "span": 328 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 157 + }, + "value": { + "Place": { + "local": 5, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 2, + "span": 290 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 3, + "span": 330 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "layout", + "source_info": { + "scope": 3, + "span": 331 + }, + "value": { + "Place": { + "local": 7, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 4, + "span": 157 + }, + "value": { + "Place": { + "local": 8, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 5, + "span": 158 + }, + "value": { + "Place": { + "local": 10, + "projection": [] + } + } + } + ] + } + ], + "id": 22, + "name": "::deallocate" + } + }, + "symbol_name": "_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT$10deallocate17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 335 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Field": [ + 0, + 40 + ] + }, + { + "Field": [ + 0, + 41 + ] + }, + { + "Field": [ + 0, + 42 + ] + } + ] + } + } + } + ] + }, + "span": 335 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 7, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 335 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 336 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 6, + "projection": [ + { + "Field": [ + 0, + 40 + ] + }, + { + "Field": [ + 0, + 41 + ] + }, + { + "Field": [ + 0, + 42 + ] + } + ] + } + } + } + ] + }, + "span": 336 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 336 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 44, + "kind": "ZeroSized", + "ty": 81 + }, + "span": 333, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 334 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 337 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 338, + "ty": 20 + }, + { + "mutability": "Not", + "span": 339, + "ty": 82 + }, + { + "mutability": "Not", + "span": 340, + "ty": 82 + }, + { + "mutability": "Not", + "span": 335, + "ty": 21 + }, + { + "mutability": "Not", + "span": 336, + "ty": 21 + }, + { + "mutability": "Mut", + "span": 339, + "ty": 79 + }, + { + "mutability": "Mut", + "span": 340, + "ty": 79 + }, + { + "mutability": "Mut", + "span": 339, + "ty": 42 + }, + { + "mutability": "Mut", + "span": 340, + "ty": 42 + } + ], + "span": 341, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 339 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 340 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 23, + "name": " as std::cmp::PartialEq>::eq" + } + }, + "symbol_name": "_ZN71_$LT$alloc..boxed..Box$LT$T$C$A$GT$$u20$as$u20$core..cmp..PartialEq$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 40 + ] + }, + { + "Field": [ + 0, + 41 + ] + } + ] + } + } + } + ] + }, + "span": 344 + }, + { + "kind": { + "Assign": [ + { + "local": 16, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 40 + ] + }, + { + "Field": [ + 1, + 84 + ] + } + ] + } + } + } + ] + }, + "span": 344 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 345 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 15, + "projection": [] + } + }, + 85 + ] + } + ] + }, + "span": 169 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 4, + "projection": [] + } + }, + 42 + ] + } + ] + }, + "span": 345 + }, + { + "kind": { + "StorageLive": 9 + }, + "span": 346 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 8, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 45, + "kind": "ZeroSized", + "ty": 83 + }, + "span": 342, + "user_ty": null + } + }, + "target": 4, + "unwind": "Unreachable" + } + }, + "span": 343 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 7 + }, + "span": 349 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 1, + 66 + ] + } + ] + } + ] + } + ] + }, + "span": 349 + }, + { + "kind": { + "StorageLive": 14 + }, + "span": 168 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 4, + "projection": [] + } + }, + 53 + ] + } + ] + }, + "span": 168 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 13, + 0, + [ + { + "Type": 9 + } + ], + null, + null + ] + }, + [ + { + "Move": { + "local": 14, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 170 + }, + { + "kind": { + "StorageDead": 14 + }, + "span": 171 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 7, + "projection": [] + } + }, + { + "Move": { + "local": 13, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 6, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 46, + "kind": "ZeroSized", + "ty": 86 + }, + "span": 347, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 348 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 7 + }, + "span": 351 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 3 + } + }, + "span": 350 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 352 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 9, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 47, + "kind": "ZeroSized", + "ty": 87 + }, + "span": 353, + "user_ty": null + } + }, + "target": 5, + "unwind": "Unreachable" + } + }, + "span": 354 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 10 + }, + "span": 160 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "NullaryOp": [ + "UbChecks", + 20 + ] + } + ] + }, + "span": 160 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 10, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 7 + ] + ], + "otherwise": 6 + } + } + }, + "span": 160 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 8, + "projection": [] + } + }, + { + "Copy": { + "local": 9, + "projection": [] + } + } + ], + "destination": { + "local": 11, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 30, + "kind": "ZeroSized", + "ty": 61 + }, + "span": 174, + "user_ty": null + } + }, + "target": 7, + "unwind": "Unreachable" + } + }, + "span": 175 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 10 + }, + "span": 180 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 181 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 9, + "projection": [] + } + }, + 49 + ] + } + ] + }, + "span": 181 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 14, + 0, + [], + null, + null + ] + }, + [ + { + "Copy": { + "local": 8, + "projection": [] + } + }, + { + "Move": { + "local": 12, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 182 + }, + { + "kind": { + "StorageDead": 12 + }, + "span": 183 + }, + { + "kind": { + "StorageDead": 9 + }, + "span": 346 + }, + { + "kind": { + "StorageDead": 3 + }, + "span": 356 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 357 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [] + } + ] + } + ] + }, + "span": 357 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 358 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 8, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 1 + } + } + }, + "span": 355 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 359, + "ty": 1 + }, + { + "mutability": "Not", + "span": 360, + "ty": 45 + }, + { + "mutability": "Not", + "span": 361, + "ty": 56 + }, + { + "mutability": "Mut", + "span": 345, + "ty": 42 + }, + { + "mutability": "Mut", + "span": 345, + "ty": 85 + }, + { + "mutability": "Mut", + "span": 357, + "ty": 57 + }, + { + "mutability": "Not", + "span": 348, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 349, + "ty": 63 + }, + { + "mutability": "Mut", + "span": 362, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 363, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 160, + "ty": 20 + }, + { + "mutability": "Not", + "span": 175, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 181, + "ty": 49 + }, + { + "mutability": "Mut", + "span": 364, + "ty": 65 + }, + { + "mutability": "Mut", + "span": 168, + "ty": 53 + }, + { + "mutability": "Not", + "span": 365, + "ty": 41 + }, + { + "mutability": "Not", + "span": 365, + "ty": 84 + } + ], + "span": 374, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 360 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": { + "projection": [ + { + "Field": [ + 0, + 41 + ] + } + ], + "ty": 40 + }, + "name": "ptr", + "source_info": { + "scope": 1, + "span": 365 + }, + "value": { + "Place": { + "local": 15, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": { + "projection": [ + { + "Field": [ + 1, + 84 + ] + } + ], + "ty": 40 + }, + "name": "ptr", + "source_info": { + "scope": 1, + "span": 365 + }, + "value": { + "Place": { + "local": 16, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "layout", + "source_info": { + "scope": 2, + "span": 361 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": { + "projection": [ + { + "Field": [ + 0, + 41 + ] + } + ], + "ty": 40 + }, + "name": "self", + "source_info": { + "scope": 3, + "span": 366 + }, + "value": { + "Place": { + "local": 15, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": { + "projection": [ + { + "Field": [ + 1, + 84 + ] + } + ], + "ty": 40 + }, + "name": "self", + "source_info": { + "scope": 3, + "span": 366 + }, + "value": { + "Place": { + "local": 16, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "t", + "source_info": { + "scope": 5, + "span": 367 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "size", + "source_info": { + "scope": 6, + "span": 368 + }, + "value": { + "Place": { + "local": 8, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "align", + "source_info": { + "scope": 6, + "span": 369 + }, + "value": { + "Place": { + "local": 9, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "val", + "source_info": { + "scope": 7, + "span": 370 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "val", + "source_info": { + "scope": 8, + "span": 371 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "size", + "source_info": { + "scope": 9, + "span": 191 + }, + "value": { + "Place": { + "local": 8, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 9, + "span": 192 + }, + "value": { + "Place": { + "local": 9, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 10, + "span": 157 + }, + "value": { + "Place": { + "local": 5, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": { + "projection": [ + { + "Field": [ + 0, + 41 + ] + } + ], + "ty": 40 + }, + "name": "self", + "source_info": { + "scope": 11, + "span": 372 + }, + "value": { + "Place": { + "local": 15, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": { + "projection": [ + { + "Field": [ + 1, + 84 + ] + } + ], + "ty": 40 + }, + "name": "self", + "source_info": { + "scope": 11, + "span": 372 + }, + "value": { + "Place": { + "local": 16, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": { + "projection": [ + { + "Field": [ + 0, + 65 + ] + } + ], + "ty": 88 + }, + "name": "unique", + "source_info": { + "scope": 14, + "span": 373 + }, + "value": { + "Place": { + "local": 13, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": { + "projection": [ + { + "Field": [ + 1, + 89 + ] + } + ], + "ty": 88 + }, + "name": "unique", + "source_info": { + "scope": 14, + "span": 373 + }, + "value": { + "Const": { + "const_": { + "id": 48, + "kind": "ZeroSized", + "ty": 89 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 24, + "name": " as std::ops::Drop>::drop" + } + }, + "symbol_name": "_ZN72_$LT$alloc..boxed..Box$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [], + "id": 56, + "name": "alloc::alloc::__rust_no_alloc_shim_is_unstable" + } + }, + "symbol_name": "__rust_no_alloc" + } + ] +} diff --git a/tests/integration/failing/defined-trait.rs b/tests/integration/failing/defined-trait.rs new file mode 100644 index 0000000..8a67116 --- /dev/null +++ b/tests/integration/failing/defined-trait.rs @@ -0,0 +1,19 @@ +trait Summary { + fn summarise(&self) -> String; +} + +#[allow(dead_code)] +struct Container { + number: u32, +} + +impl Summary for Container { + fn summarise(&self) -> String { + "The number is zero or more!".to_string() + } +} + +fn main() { + let con = Container { number:42 }; + assert!(con.summarise() == "The number is zero or more!"); +} \ No newline at end of file diff --git a/tests/integration/failing/defined-trait.smir.json.expected b/tests/integration/failing/defined-trait.smir.json.expected new file mode 100644 index 0000000..e69de29 diff --git a/tests/integration/failing/derive-copy-struct.rs b/tests/integration/failing/derive-copy-struct.rs new file mode 100644 index 0000000..d1960f7 --- /dev/null +++ b/tests/integration/failing/derive-copy-struct.rs @@ -0,0 +1,19 @@ +#[derive(Copy, Clone)] +struct Container { + number:u32, +} + +fn take_first_container(containers: &[Container]) -> Container { + containers[0] +} + +fn main() { + let con1 = Container { number: 42 }; + let con2 = Container { number: 24 }; + + let cons = [con1, con2]; + + let first:Container = take_first_container(&cons[..]); + + assert!(first.number == 42); +} \ No newline at end of file diff --git a/tests/integration/failing/derive-copy-struct.smir.json.expected b/tests/integration/failing/derive-copy-struct.smir.json.expected new file mode 100644 index 0000000..479a4e4 --- /dev/null +++ b/tests/integration/failing/derive-copy-struct.smir.json.expected @@ -0,0 +1,2454 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 102, + 105, + 114, + 115, + 116, + 46, + 110, + 117, + 109, + 98, + 101, + 114, + 32, + 61, + 61, + 32, + 52, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN97_$LT$core..ops..range..RangeFull$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN4core5array85_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN18derive_copy_struct20take_first_container17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 69, + "user_ty": null + } + } + } + ] + }, + "span": 69 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "UnaryOp": [ + "PtrMetadata", + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 68 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 3, + "projection": [] + } + } + ] + } + ] + }, + "span": 68 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 4, + "projection": [] + } + }, + "expected": true, + "msg": { + "BoundsCheck": { + "index": { + "Copy": { + "local": 2, + "projection": [] + } + }, + "len": { + "Move": { + "local": 3, + "projection": [] + } + } + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 68 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Index": 2 + } + ] + } + } + } + ] + }, + "span": 68 + } + ], + "terminator": { + "kind": "Return", + "span": 70 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 71, + "ty": 30 + }, + { + "mutability": "Not", + "span": 72, + "ty": 25 + }, + { + "mutability": "Not", + "span": 69, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 31 + } + ], + "span": 73, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "containers", + "source_info": { + "scope": 0, + "span": 72 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 9, + "name": "take_first_container" + } + }, + "symbol_name": "_ZN18derive_copy_struct20take_first_container17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 11, + 0, + [], + null, + null + ] + }, + [ + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 33 + }, + "span": 75, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 76 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 11, + 0, + [], + null, + null + ] + }, + [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 24, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 33 + }, + "span": 77, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 78 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Aggregate": [ + { + "Array": 30 + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 79 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 3, + "projection": [] + } + ] + } + ] + }, + "span": 80 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 13, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 32 + }, + "span": 74, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 74 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 5, + "projection": [] + } + } + ], + "destination": { + "local": 4, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 16, + "kind": "ZeroSized", + "ty": 34 + }, + "span": 81, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 82 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 4, + "projection": [ + { + "Field": [ + 0, + 33 + ] + } + ] + } + } + } + ] + }, + "span": 84 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 7, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 42, + 3 + ] + ], + "otherwise": 4 + } + } + }, + "span": 83 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 85 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 18, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 36 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 8, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 17, + "kind": "ZeroSized", + "ty": 35 + }, + "span": 86, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 86 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 87, + "ty": 1 + }, + { + "mutability": "Not", + "span": 88, + "ty": 30 + }, + { + "mutability": "Not", + "span": 89, + "ty": 30 + }, + { + "mutability": "Not", + "span": 90, + "ty": 37 + }, + { + "mutability": "Not", + "span": 91, + "ty": 30 + }, + { + "mutability": "Not", + "span": 74, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 80, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 84, + "ty": 33 + }, + { + "mutability": "Mut", + "span": 86, + "ty": 38 + } + ], + "span": 92, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "con1", + "source_info": { + "scope": 1, + "span": 88 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "con2", + "source_info": { + "scope": 2, + "span": 89 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "cons", + "source_info": { + "scope": 3, + "span": 90 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "first", + "source_info": { + "scope": 4, + "span": 91 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + } + ] + } + ], + "id": 10, + "name": "main" + } + }, + "symbol_name": "_ZN18derive_copy_struct4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 25 + ] + } + ] + }, + "span": 44 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 42, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 43 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 45 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 46, + "ty": 25 + }, + { + "mutability": "Not", + "span": 47, + "ty": 26 + }, + { + "mutability": "Not", + "span": 48, + "ty": 27 + }, + { + "mutability": "Not", + "span": 44, + "ty": 25 + } + ], + "span": 49, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 47 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 48 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 5, + "name": "std::array:: for [Container; 2]>::index" + } + }, + "symbol_name": "_ZN4core5array85_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 1, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 50, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 51 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 52 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 53, + "ty": 25 + }, + { + "mutability": "Not", + "span": 54, + "ty": 25 + }, + { + "mutability": "Not", + "span": 55, + "ty": 27 + } + ], + "span": 56, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 54 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 55 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "core::slice::index:: for [Container]>::index" + } + }, + "symbol_name": "_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 58, + "user_ty": null + } + } + } + ] + }, + "span": 58 + } + ], + "terminator": { + "kind": "Return", + "span": 57 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 59, + "ty": 17 + }, + { + "mutability": "Not", + "span": 60, + "ty": 1 + } + ], + "span": 61, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 7, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [] + } + } + } + ] + }, + "span": 63 + } + ], + "terminator": { + "kind": "Return", + "span": 62 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 64, + "ty": 25 + }, + { + "mutability": "Not", + "span": 65, + "ty": 27 + }, + { + "mutability": "Not", + "span": 66, + "ty": 25 + } + ], + "span": 67, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 2, + "composite": null, + "name": "slice", + "source_info": { + "scope": 0, + "span": 66 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 8, + "name": ">::index" + } + }, + "symbol_name": "_ZN97_$LT$core..ops..range..RangeFull$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h" + } + ] +} diff --git a/tests/integration/failing/generic.rs b/tests/integration/failing/generic.rs new file mode 100644 index 0000000..df71801 --- /dev/null +++ b/tests/integration/failing/generic.rs @@ -0,0 +1,14 @@ +fn index_slice(slice:&[T], index: usize) -> &T { + &(slice[index]) +} + +fn main() { + let numbers = [1, 2, 3, 4, 5]; + let letters = ['a', 'b', 'c', 'd', 'e']; + + let middle_number:&i32 = index_slice(&numbers[..], 2); + let middle_letter:&char = index_slice(&letters[..], 2); + + assert!(*middle_number == 3); + assert!(*middle_letter == 'c'); +} \ No newline at end of file diff --git a/tests/integration/failing/generic.smir.json.expected b/tests/integration/failing/generic.smir.json.expected new file mode 100644 index 0000000..d186217 --- /dev/null +++ b/tests/integration/failing/generic.smir.json.expected @@ -0,0 +1,3499 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 42, + 109, + 105, + 100, + 100, + 108, + 101, + 95, + 110, + 117, + 109, + 98, + 101, + 114, + 32, + 61, + 61, + 32, + 51 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 42, + 109, + 105, + 100, + 100, + 108, + 101, + 95, + 108, + 101, + 116, + 116, + 101, + 114, + 32, + 61, + 61, + 32, + 39, + 99, + 39 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN97_$LT$core..ops..range..RangeFull$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN97_$LT$core..ops..range..RangeFull$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN4core5array85_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN7generic11index_slice17h" + } + ], + [ + { + "NormalSym": "_ZN4core5array85_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN7generic11index_slice17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 44 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 42, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 43 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 45 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 46, + "ty": 29 + }, + { + "mutability": "Not", + "span": 47, + "ty": 30 + }, + { + "mutability": "Not", + "span": 48, + "ty": 27 + }, + { + "mutability": "Not", + "span": 44, + "ty": 29 + } + ], + "span": 49, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 47 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 48 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 5, + "name": "std::array:: for [char; 5]>::index" + } + }, + "symbol_name": "_ZN4core5array85_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 25 + ] + } + ] + }, + "span": 44 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 42, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 43 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 45 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 46, + "ty": 25 + }, + { + "mutability": "Not", + "span": 47, + "ty": 26 + }, + { + "mutability": "Not", + "span": 48, + "ty": 27 + }, + { + "mutability": "Not", + "span": 44, + "ty": 25 + } + ], + "span": 49, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 47 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 48 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 5, + "name": "std::array:: for [i32; 5]>::index" + } + }, + "symbol_name": "_ZN4core5array85_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 1, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 32 + }, + "span": 50, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 51 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 52 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 53, + "ty": 29 + }, + { + "mutability": "Not", + "span": 54, + "ty": 29 + }, + { + "mutability": "Not", + "span": 55, + "ty": 27 + } + ], + "span": 56, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 54 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 55 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "core::slice::index:: for [char]>::index" + } + }, + "symbol_name": "_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 1, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 31 + }, + "span": 50, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 51 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 52 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 53, + "ty": 25 + }, + { + "mutability": "Not", + "span": 54, + "ty": 25 + }, + { + "mutability": "Not", + "span": 55, + "ty": 27 + } + ], + "span": 56, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 54 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 55 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "core::slice::index:: for [i32]>::index" + } + }, + "symbol_name": "_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 58, + "user_ty": null + } + } + } + ] + }, + "span": 58 + } + ], + "terminator": { + "kind": "Return", + "span": 57 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 59, + "ty": 17 + }, + { + "mutability": "Not", + "span": 60, + "ty": 1 + } + ], + "span": 61, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 7, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "UnaryOp": [ + "PtrMetadata", + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 68 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 3, + "projection": [] + } + } + ] + } + ] + }, + "span": 68 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 4, + "projection": [] + } + }, + "expected": true, + "msg": { + "BoundsCheck": { + "index": { + "Copy": { + "local": 2, + "projection": [] + } + }, + "len": { + "Move": { + "local": 3, + "projection": [] + } + } + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 68 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [ + "Deref", + { + "Index": 2 + } + ] + } + ] + } + ] + }, + "span": 70 + } + ], + "terminator": { + "kind": "Return", + "span": 69 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 71, + "ty": 36 + }, + { + "mutability": "Not", + "span": 72, + "ty": 29 + }, + { + "mutability": "Not", + "span": 73, + "ty": 34 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 34 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 35 + } + ], + "span": 74, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "slice", + "source_info": { + "scope": 0, + "span": 72 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 73 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 9, + "name": "index_slice::" + } + }, + "symbol_name": "_ZN7generic11index_slice17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "UnaryOp": [ + "PtrMetadata", + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 68 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 3, + "projection": [] + } + } + ] + } + ] + }, + "span": 68 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 4, + "projection": [] + } + }, + "expected": true, + "msg": { + "BoundsCheck": { + "index": { + "Copy": { + "local": 2, + "projection": [] + } + }, + "len": { + "Move": { + "local": 3, + "projection": [] + } + } + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 68 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [ + "Deref", + { + "Index": 2 + } + ] + } + ] + } + ] + }, + "span": 70 + } + ], + "terminator": { + "kind": "Return", + "span": 69 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 71, + "ty": 33 + }, + { + "mutability": "Not", + "span": 72, + "ty": 25 + }, + { + "mutability": "Not", + "span": 73, + "ty": 34 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 34 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 35 + } + ], + "span": 74, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "slice", + "source_info": { + "scope": 0, + "span": 72 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 73 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 9, + "name": "index_slice::" + } + }, + "symbol_name": "_ZN7generic11index_slice17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Array": 16 + }, + [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 76, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 77, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 17, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 78, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 18, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 4, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 79, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 19, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 5, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 80, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 81 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Aggregate": [ + { + "Array": 38 + }, + [ + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 97, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 38 + }, + "span": 82, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 98, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 38 + }, + "span": 83, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 22, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 99, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 38 + }, + "span": 84, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 100, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 38 + }, + "span": 85, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 24, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 101, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 38 + }, + "span": 86, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 87 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 88 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 5, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 4, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 13, + "kind": "ZeroSized", + "ty": 37 + }, + "span": 75, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 75 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 4, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 26, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 34 + }, + "span": 90, + "user_ty": null + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 25, + "kind": "ZeroSized", + "ty": 39 + }, + "span": 89, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 91 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [] + } + ] + } + ] + }, + "span": 93 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 8, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 7, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 27, + "kind": "ZeroSized", + "ty": 40 + }, + "span": 92, + "user_ty": null + } + }, + "target": 3, + "unwind": "Continue" + } + }, + "span": 92 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 7, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 26, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 34 + }, + "span": 95, + "user_ty": null + } + } + ], + "destination": { + "local": 6, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 28, + "kind": "ZeroSized", + "ty": 41 + }, + "span": 94, + "user_ty": null + } + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 96 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 3, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 98 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 9, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 3, + 5 + ] + ], + "otherwise": 6 + } + } + }, + "span": 97 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 6, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 100 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 11, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 99, + 7 + ] + ], + "otherwise": 8 + } + } + }, + "span": 99 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 30, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 43 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 10, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 29, + "kind": "ZeroSized", + "ty": 42 + }, + "span": 101, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 101 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 102 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 31, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 43 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 12, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 29, + "kind": "ZeroSized", + "ty": 42 + }, + "span": 103, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 103 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 104, + "ty": 1 + }, + { + "mutability": "Not", + "span": 105, + "ty": 44 + }, + { + "mutability": "Not", + "span": 106, + "ty": 45 + }, + { + "mutability": "Not", + "span": 91, + "ty": 33 + }, + { + "mutability": "Not", + "span": 75, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 88, + "ty": 26 + }, + { + "mutability": "Not", + "span": 96, + "ty": 36 + }, + { + "mutability": "Not", + "span": 92, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 93, + "ty": 30 + }, + { + "mutability": "Mut", + "span": 98, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 101, + "ty": 46 + }, + { + "mutability": "Mut", + "span": 100, + "ty": 38 + }, + { + "mutability": "Mut", + "span": 103, + "ty": 46 + } + ], + "span": 109, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "numbers", + "source_info": { + "scope": 1, + "span": 105 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "letters", + "source_info": { + "scope": 2, + "span": 106 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "middle_number", + "source_info": { + "scope": 3, + "span": 107 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "middle_letter", + "source_info": { + "scope": 4, + "span": 108 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + } + ] + } + ], + "id": 10, + "name": "main" + } + }, + "symbol_name": "_ZN7generic4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [] + } + } + } + ] + }, + "span": 63 + } + ], + "terminator": { + "kind": "Return", + "span": 62 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 64, + "ty": 29 + }, + { + "mutability": "Not", + "span": 65, + "ty": 27 + }, + { + "mutability": "Not", + "span": 66, + "ty": 29 + } + ], + "span": 67, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 2, + "composite": null, + "name": "slice", + "source_info": { + "scope": 0, + "span": 66 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 8, + "name": ">::index" + } + }, + "symbol_name": "_ZN97_$LT$core..ops..range..RangeFull$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [] + } + } + } + ] + }, + "span": 63 + } + ], + "terminator": { + "kind": "Return", + "span": 62 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 64, + "ty": 25 + }, + { + "mutability": "Not", + "span": 65, + "ty": 27 + }, + { + "mutability": "Not", + "span": 66, + "ty": 25 + } + ], + "span": 67, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 2, + "composite": null, + "name": "slice", + "source_info": { + "scope": 0, + "span": 66 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 8, + "name": ">::index" + } + }, + "symbol_name": "_ZN97_$LT$core..ops..range..RangeFull$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h" + } + ] +} diff --git a/tests/integration/failing/panic_example.rs b/tests/integration/failing/panic_example.rs new file mode 100644 index 0000000..c307e16 --- /dev/null +++ b/tests/integration/failing/panic_example.rs @@ -0,0 +1,3 @@ +fn main() { + panic!() +} \ No newline at end of file diff --git a/tests/integration/failing/panic_example.smir.json.expected b/tests/integration/failing/panic_example.smir.json.expected new file mode 100644 index 0000000..6e1e773 --- /dev/null +++ b/tests/integration/failing/panic_example.smir.json.expected @@ -0,0 +1,1452 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 101, + 120, + 112, + 108, + 105, + 99, + 105, + 116, + 32, + 112, + 97, + 110, + 105, + 99 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN3std9panicking11begin_panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 25 + }, + "span": 48, + "user_ty": null + } + } + ], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 47, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 50, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 26 + } + ], + "span": 51, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN13panic_example4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/failing/std-string-empty.rs b/tests/integration/failing/std-string-empty.rs new file mode 100644 index 0000000..be025d6 --- /dev/null +++ b/tests/integration/failing/std-string-empty.rs @@ -0,0 +1,4 @@ +fn main() { + let a:String = String::new(); + assert!(a == ""); +} \ No newline at end of file diff --git a/tests/integration/failing/std-string-empty.smir.json.expected b/tests/integration/failing/std-string-empty.smir.json.expected new file mode 100644 index 0000000..dd2d670 --- /dev/null +++ b/tests/integration/failing/std-string-empty.smir.json.expected @@ -0,0 +1,5984 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Not", + "provenance": { + "ptrs": [ + [ + 0, + 7 + ] + ] + } + } + } + ], + [ + { + "Memory": { + "align": 8, + "bytes": [], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Not", + "provenance": { + "ptrs": [ + [ + 0, + 10 + ] + ] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 117, + 110, + 115, + 97, + 102, + 101, + 32, + 112, + 114, + 101, + 99, + 111, + 110, + 100, + 105, + 116, + 105, + 111, + 110, + 40, + 115, + 41, + 32, + 118, + 105, + 111, + 108, + 97, + 116, + 101, + 100, + 58, + 32, + 115, + 108, + 105, + 99, + 101, + 58, + 58, + 102, + 114, + 111, + 109, + 95, + 114, + 97, + 119, + 95, + 112, + 97, + 114, + 116, + 115, + 32, + 114, + 101, + 113, + 117, + 105, + 114, + 101, + 115, + 32, + 116, + 104, + 101, + 32, + 112, + 111, + 105, + 110, + 116, + 101, + 114, + 32, + 116, + 111, + 32, + 98, + 101, + 32, + 97, + 108, + 105, + 103, + 110, + 101, + 100, + 32, + 97, + 110, + 100, + 32, + 110, + 111, + 110, + 45, + 110, + 117, + 108, + 108, + 44, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 32, + 116, + 111, + 116, + 97, + 108, + 32, + 115, + 105, + 122, + 101, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 115, + 108, + 105, + 99, + 101, + 32, + 110, + 111, + 116, + 32, + 116, + 111, + 32, + 101, + 120, + 99, + 101, + 101, + 100, + 32, + 96, + 105, + 115, + 105, + 122, + 101, + 58, + 58, + 77, + 65, + 88, + 96 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 105, + 115, + 95, + 97, + 108, + 105, + 103, + 110, + 101, + 100, + 95, + 116, + 111, + 58, + 32, + 97, + 108, + 105, + 103, + 110, + 32, + 105, + 115, + 32, + 110, + 111, + 116, + 32, + 97, + 32, + 112, + 111, + 119, + 101, + 114, + 45, + 111, + 102, + 45, + 116, + 119, + 111 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 32, + 61, + 61, + 32, + 34, + 34 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN70_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17h" + } + ], + [ + { + "NormalSym": "_ZN77_$LT$alloc..raw_vec..RawVec$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17h" + } + ], + [ + { + "IntrinsicSym": "ctpop" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking14panic_nounwind17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking9panic_fmt17h" + } + ], + [ + { + "NormalSym": "_ZN4core5slice3raw14from_raw_parts18precondition_check17h" + } + ], + [ + { + "NormalSym": "_ZN4core3str6traits99_$LT$impl$u20$core..slice..index..SliceIndex$LT$str$GT$$u20$for$u20$core..ops..range..RangeFull$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN74_$LT$alloc..string..String$u20$as$u20$core..ops..index..Index$LT$I$GT$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN73_$LT$$u5b$A$u5d$$u20$as$u20$core..slice..cmp..SlicePartialEq$LT$B$GT$$GT$5equal17h" + } + ], + [ + { + "NormalSym": "_ZN5alloc6string6String3new17h" + } + ], + [ + { + "NormalSym": "_ZN77_$LT$alloc..string..String$u20$as$u20$core..cmp..PartialEq$LT$$RF$str$GT$$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ], + [ + { + "NormalSym": "_ZN4core3ptr53drop_in_place$LT$alloc..raw_vec..RawVec$LT$u8$GT$$GT$17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ptr46drop_in_place$LT$alloc..vec..Vec$LT$u8$GT$$GT$17h" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 29, + "kind": "ZeroSized", + "ty": 68 + }, + "span": 195, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 196 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 198 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 31, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 3 + ] + ] + } + } + }, + "ty": 66 + }, + "span": 199, + "user_ty": null + } + } + } + ] + }, + "span": 199 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 30, + "kind": "ZeroSized", + "ty": 69 + }, + "span": 197, + "user_ty": null + } + }, + "target": 2, + "unwind": { + "Cleanup": 6 + } + } + }, + "span": 197 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 4 + ] + ], + "otherwise": 3 + } + } + }, + "span": 197 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 5, + "unwind": "Continue" + } + }, + "span": 200 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 33, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 4 + ] + ] + } + } + }, + "ty": 33 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 32, + "kind": "ZeroSized", + "ty": 70 + }, + "span": 201, + "user_ty": null + } + }, + "target": null, + "unwind": { + "Cleanup": 6 + } + } + }, + "span": 201 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 202 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 7, + "unwind": "Terminate" + } + }, + "span": 200 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 203 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 204, + "ty": 1 + }, + { + "mutability": "Not", + "span": 205, + "ty": 51 + }, + { + "mutability": "Mut", + "span": 197, + "ty": 46 + }, + { + "mutability": "Mut", + "span": 198, + "ty": 60 + }, + { + "mutability": "Mut", + "span": 199, + "ty": 66 + }, + { + "mutability": "Mut", + "span": 201, + "ty": 47 + } + ], + "span": 203, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 205 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + }, + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 34, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 5 + ] + ] + } + } + }, + "ty": 33 + }, + "span": 199, + "user_ty": null + } + } + } + ] + }, + "span": 199 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 199 + } + ], + "terminator": { + "kind": "Return", + "span": 199 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 199, + "ty": 66 + }, + { + "mutability": "Mut", + "span": 199, + "ty": 33 + } + ], + "span": 199, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 15, + "name": "main" + } + }, + "symbol_name": "_ZN16std_string_empty4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 24 + ] + } + ] + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 41 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 25 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::" + } + }, + "symbol_name": "_ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 41 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 41, + "user_ty": null + } + }, + "target": 4, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 41 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 41 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 27 + ] + } + ] + }, + "target": 1, + "unwind": "Terminate" + } + }, + "span": 41 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 27 + ] + } + ] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 41, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 41, + "ty": 1 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::>" + } + }, + "symbol_name": "_ZN4core3ptr46drop_in_place$LT$alloc..vec..Vec$LT$u8$GT$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 41 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 30 + }, + "span": 41, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 41 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 31 + }, + { + "mutability": "Mut", + "span": 41, + "ty": 32 + }, + { + "mutability": "Mut", + "span": 41, + "ty": 1 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::>" + } + }, + "symbol_name": "_ZN4core3ptr53drop_in_place$LT$alloc..raw_vec..RawVec$LT$u8$GT$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [] + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 33 + }, + { + "mutability": "Not", + "span": 45, + "ty": 34 + }, + { + "mutability": "Not", + "span": 46, + "ty": 33 + } + ], + "span": 47, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 2, + "composite": null, + "name": "slice", + "source_info": { + "scope": 0, + "span": 46 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 5, + "name": "core::str::traits:: for std::ops::RangeFull>::index" + } + }, + "symbol_name": "_ZN4core3str6traits99_$LT$impl$u20$core..slice..index..SliceIndex$LT$str$GT$$u20$for$u20$core..ops..range..RangeFull$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 50 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 51 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 36 + ] + } + ] + }, + "span": 51 + }, + { + "kind": { + "StorageLive": 13 + }, + "span": 52 + }, + { + "kind": { + "StorageLive": 15 + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 15, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 35 + }, + "span": 48, + "user_ty": null + } + }, + "target": 10, + "unwind": "Unreachable" + } + }, + "span": 49 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 55 + }, + { + "kind": { + "StorageLive": 7 + }, + "span": 56 + }, + { + "kind": { + "StorageLive": 19 + }, + "span": 56 + }, + { + "kind": { + "StorageLive": 18 + }, + "span": 57 + }, + { + "kind": { + "Assign": [ + { + "local": 19, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 37 + }, + "span": 58, + "user_ty": null + } + } + ] + } + ] + }, + "span": 54 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 11 + ] + ], + "otherwise": 12 + } + } + }, + "span": 54 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 7 + }, + "span": 60 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 60 + } + ], + "terminator": { + "kind": "Return", + "span": 59 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Goto": { + "target": 5 + } + }, + "span": 29 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 55 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 5 + } + }, + "span": 29 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 162, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 33 + }, + "span": 62, + "user_ty": null + } + } + ], + "destination": { + "local": 8, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 38 + }, + "span": 61, + "user_ty": null + } + }, + "target": null, + "unwind": "Unreachable" + } + }, + "span": 63 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 12 + }, + "span": 64 + }, + { + "kind": { + "StorageLive": 9 + }, + "span": 65 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 37 + }, + "span": 66, + "user_ty": null + } + } + ] + } + ] + }, + "span": 67 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "UnaryOp": [ + "Not", + { + "Move": { + "local": 9, + "projection": [] + } + } + ] + } + ] + }, + "span": 68 + }, + { + "kind": { + "StorageDead": 9 + }, + "span": 69 + }, + { + "kind": { + "StorageDead": 13 + }, + "span": 52 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 5, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 4 + ] + ], + "otherwise": 1 + } + } + }, + "span": 50 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 12 + }, + "span": 64 + }, + { + "kind": { + "StorageDead": 13 + }, + "span": 52 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 4 + } + }, + "span": 50 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 15 + }, + "span": 70 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 71 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 37 + ] + } + ] + }, + "span": 72 + }, + { + "kind": { + "StorageLive": 14 + }, + "span": 73 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "BinaryOp": [ + "Sub", + { + "Copy": { + "local": 3, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 37 + }, + "span": 74, + "user_ty": null + } + } + ] + } + ] + }, + "span": 73 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Copy": { + "local": 13, + "projection": [] + } + }, + { + "Move": { + "local": 14, + "projection": [] + } + } + ] + } + ] + }, + "span": 71 + }, + { + "kind": { + "StorageDead": 14 + }, + "span": 75 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 12, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 6 + ] + ], + "otherwise": 7 + } + } + }, + "span": 64 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 15 + }, + "span": 70 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 78 + }, + { + "kind": { + "StorageLive": 16 + }, + "span": 79 + }, + { + "kind": { + "Assign": [ + { + "local": 16, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 40 + }, + "span": 80, + "user_ty": null + } + }, + 41 + ] + } + ] + }, + "span": 79 + }, + { + "kind": { + "StorageLive": 17 + }, + "span": 81 + }, + { + "kind": { + "Assign": [ + { + "local": 17, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Constant": { + "const_": { + "id": 17, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 2 + ] + ] + } + } + }, + "ty": 42 + }, + "span": 81, + "user_ty": null + } + }, + 43 + ] + } + ] + }, + "span": 81 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 7, + 0, + [ + { + "Lifetime": { + "kind": "ReErased" + } + } + ], + null, + null + ] + }, + [ + { + "Move": { + "local": 16, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 18, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + null, + null, + null, + null, + null + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 44 + }, + "span": 29, + "user_ty": null + } + }, + { + "Move": { + "local": 17, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 82 + }, + { + "kind": { + "StorageDead": 17 + }, + "span": 83 + }, + { + "kind": { + "StorageDead": 16 + }, + "span": 83 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 11, + "projection": [] + } + } + ], + "destination": { + "local": 10, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 15, + "kind": "ZeroSized", + "ty": 39 + }, + "span": 76, + "user_ty": null + } + }, + "target": null, + "unwind": "Terminate" + } + }, + "span": 77 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 15, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 1, + 8 + ] + ], + "otherwise": 9 + } + } + }, + "span": 70 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 18, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 19, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 37 + }, + "span": 85, + "user_ty": null + } + } + } + ] + }, + "span": 85 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 14 + } + }, + "span": 84 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Copy": { + "local": 19, + "projection": [] + } + }, + "expected": false, + "msg": { + "DivisionByZero": { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 127 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 37 + }, + "span": 29, + "user_ty": null + } + } + }, + "target": 13, + "unwind": "Terminate" + } + }, + "span": 86 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 18, + "projection": [] + }, + { + "BinaryOp": [ + "Div", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 127 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 37 + }, + "span": 29, + "user_ty": null + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 86 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 14 + } + }, + "span": 84 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 20 + }, + "span": 87 + }, + { + "kind": { + "Assign": [ + { + "local": 20, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 18, + "projection": [] + } + } + } + ] + }, + "span": 87 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "BinaryOp": [ + "Le", + { + "Copy": { + "local": 4, + "projection": [] + } + }, + { + "Move": { + "local": 20, + "projection": [] + } + } + ] + } + ] + }, + "span": 88 + }, + { + "kind": { + "StorageDead": 20 + }, + "span": 89 + }, + { + "kind": { + "StorageDead": 18 + }, + "span": 90 + }, + { + "kind": { + "StorageDead": 19 + }, + "span": 56 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 7, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 56 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 91, + "ty": 1 + }, + { + "mutability": "Not", + "span": 92, + "ty": 45 + }, + { + "mutability": "Not", + "span": 92, + "ty": 37 + }, + { + "mutability": "Not", + "span": 92, + "ty": 37 + }, + { + "mutability": "Not", + "span": 92, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 50, + "ty": 46 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 36 + }, + { + "mutability": "Mut", + "span": 56, + "ty": 46 + }, + { + "mutability": "Not", + "span": 63, + "ty": 47 + }, + { + "mutability": "Mut", + "span": 65, + "ty": 46 + }, + { + "mutability": "Not", + "span": 77, + "ty": 47 + }, + { + "mutability": "Mut", + "span": 78, + "ty": 48 + }, + { + "mutability": "Mut", + "span": 71, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 93, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 73, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 49 + }, + { + "mutability": "Mut", + "span": 79, + "ty": 41 + }, + { + "mutability": "Mut", + "span": 81, + "ty": 43 + }, + { + "mutability": "Not", + "span": 57, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 46 + }, + { + "mutability": "Mut", + "span": 87, + "ty": 37 + } + ], + "span": 109, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "data", + "source_info": { + "scope": 0, + "span": 92 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "size", + "source_info": { + "scope": 0, + "span": 92 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "align", + "source_info": { + "scope": 0, + "span": 92 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "len", + "source_info": { + "scope": 0, + "span": 92 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 1, + "span": 94 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 1, + "span": 95 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "is_zst", + "source_info": { + "scope": 1, + "span": 96 + }, + "value": { + "Const": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 46 + }, + "span": 97, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 2, + "span": 98 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 2, + "span": 98 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "is_zst", + "source_info": { + "scope": 2, + "span": 98 + }, + "value": { + "Const": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 46 + }, + "span": 97, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 3, + "span": 99 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "align", + "source_info": { + "scope": 3, + "span": 100 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 4, + "span": 101 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 5, + "span": 102 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 6, + "span": 103 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 7, + "span": 104 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "pieces", + "source_info": { + "scope": 8, + "span": 105 + }, + "value": { + "Const": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 40 + }, + "span": 80, + "user_ty": null + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 9, + "span": 106 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "size", + "source_info": { + "scope": 14, + "span": 107 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "len", + "source_info": { + "scope": 14, + "span": 108 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "max_len", + "source_info": { + "scope": 15, + "span": 57 + }, + "value": { + "Place": { + "local": 18, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "std::slice::from_raw_parts::precondition_check" + } + }, + "symbol_name": "_ZN4core5slice3raw14from_raw_parts18precondition_check17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 22, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 111, + "user_ty": null + } + } + } + ] + }, + "span": 111 + } + ], + "terminator": { + "kind": "Return", + "span": 110 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 112, + "ty": 17 + }, + { + "mutability": "Not", + "span": 113, + "ty": 1 + } + ], + "span": 114, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 8, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 1 + }, + "span": 116 + }, + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 10, + 0, + [ + { + "Type": 9 + }, + { + "Type": 50 + } + ], + null, + null + ] + }, + [ + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 37 + }, + "span": 117, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 118 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 11, + 0, + [], + null, + null + ] + }, + [ + { + "Move": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 119 + }, + { + "kind": { + "StorageDead": 1 + }, + "span": 120 + } + ], + "terminator": { + "kind": "Return", + "span": 115 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 121, + "ty": 51 + }, + { + "mutability": "Mut", + "span": 116, + "ty": 24 + } + ], + "span": 122, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 9, + "name": "std::string::String::new" + } + }, + "symbol_name": "_ZN5alloc6string6String3new17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 4 + }, + "span": 124 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 125 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 24 + ] + } + ] + } + ] + } + ] + }, + "span": 125 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 126 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 127 + }, + { + "kind": { + "StorageLive": 9 + }, + "span": 128 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 129 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 24 + ] + }, + { + "Field": [ + 0, + 27 + ] + }, + { + "Field": [ + 0, + 52 + ] + }, + { + "Field": [ + 0, + 53 + ] + }, + { + "Field": [ + 0, + 54 + ] + } + ] + } + } + } + ] + }, + "span": 130 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 131 + }, + { + "kind": { + "StorageLive": 10 + }, + "span": 132 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 12, + "projection": [] + } + }, + 55 + ] + } + ] + }, + "span": 133 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 11, + "projection": [] + } + }, + 56 + ] + } + ] + }, + "span": 132 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 13, + 0, + [ + { + "Type": 9 + } + ], + null, + null + ] + }, + [ + { + "Move": { + "local": 10, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 134 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 135 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 131 + }, + { + "kind": { + "StorageDead": 12 + }, + "span": 129 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 9, + "projection": [] + } + }, + 55 + ] + } + ] + }, + "span": 133 + }, + { + "kind": { + "StorageDead": 9 + }, + "span": 136 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 8, + "projection": [] + } + }, + 56 + ] + } + ] + }, + "span": 137 + }, + { + "kind": { + "StorageLive": 7 + }, + "span": 138 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 24 + ] + }, + { + "Field": [ + 1, + 37 + ] + } + ] + } + } + } + ] + }, + "span": 138 + }, + { + "kind": { + "StorageLive": 13 + }, + "span": 123 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "NullaryOp": [ + "UbChecks", + 46 + ] + } + ] + }, + "span": 139 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 13, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 4 + ] + ], + "otherwise": 2 + } + } + }, + "span": 123 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 140 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 15 + }, + "span": 143 + }, + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 8, + "projection": [] + } + }, + 45 + ] + } + ] + }, + "span": 143 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 15, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 37 + }, + "span": 29, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 37 + }, + "span": 29, + "user_ty": null + } + }, + { + "Copy": { + "local": 7, + "projection": [] + } + } + ], + "destination": { + "local": 14, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 24, + "kind": "ZeroSized", + "ty": 57 + }, + "span": 141, + "user_ty": null + } + }, + "target": 3, + "unwind": "Unreachable" + } + }, + "span": 142 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 15 + }, + "span": 145 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 4 + } + }, + "span": 144 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 13 + }, + "span": 148 + }, + { + "kind": { + "StorageLive": 16 + }, + "span": 149 + }, + { + "kind": { + "Assign": [ + { + "local": 16, + "projection": [] + }, + { + "Aggregate": [ + { + "RawPtr": [ + 59, + "Not" + ] + }, + [ + { + "Copy": { + "local": 6, + "projection": [] + } + }, + { + "Copy": { + "local": 7, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 150 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 16, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 151 + }, + { + "kind": { + "StorageDead": 16 + }, + "span": 152 + }, + { + "kind": { + "StorageDead": 7 + }, + "span": 153 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 153 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 126 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 154 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 4, + "projection": [] + } + }, + 33 + ] + } + ] + }, + "span": 155 + }, + { + "kind": { + "StorageDead": 4 + }, + "span": 124 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 25, + "kind": "ZeroSized", + "ty": 58 + }, + "span": 146, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 147 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 156, + "ty": 33 + }, + { + "mutability": "Not", + "span": 157, + "ty": 60 + }, + { + "mutability": "Not", + "span": 158, + "ty": 34 + }, + { + "mutability": "Not", + "span": 159, + "ty": 33 + }, + { + "mutability": "Not", + "span": 160, + "ty": 61 + }, + { + "mutability": "Mut", + "span": 125, + "ty": 62 + }, + { + "mutability": "Mut", + "span": 127, + "ty": 56 + }, + { + "mutability": "Mut", + "span": 138, + "ty": 37 + }, + { + "mutability": "Mut", + "span": 137, + "ty": 55 + }, + { + "mutability": "Mut", + "span": 128, + "ty": 54 + }, + { + "mutability": "Mut", + "span": 132, + "ty": 56 + }, + { + "mutability": "Mut", + "span": 161, + "ty": 55 + }, + { + "mutability": "Mut", + "span": 130, + "ty": 54 + }, + { + "mutability": "Mut", + "span": 123, + "ty": 46 + }, + { + "mutability": "Not", + "span": 142, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 143, + "ty": 45 + }, + { + "mutability": "Not", + "span": 149, + "ty": 63 + } + ], + "span": 171, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 157 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 158 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 162 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 2, + "span": 163 + }, + "value": { + "Place": { + "local": 5, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 3, + "span": 164 + }, + "value": { + "Place": { + "local": 5, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "data", + "source_info": { + "scope": 12, + "span": 165 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "len", + "source_info": { + "scope": 12, + "span": 166 + }, + "value": { + "Place": { + "local": 7, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "data", + "source_info": { + "scope": 17, + "span": 167 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "len", + "source_info": { + "scope": 17, + "span": 168 + }, + "value": { + "Place": { + "local": 7, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "data_pointer", + "source_info": { + "scope": 18, + "span": 169 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "v", + "source_info": { + "scope": 19, + "span": 170 + }, + "value": { + "Place": { + "local": 16, + "projection": [] + } + } + } + ] + } + ], + "id": 12, + "name": ">::index" + } + }, + "symbol_name": "_ZN74_$LT$alloc..string..String$u20$as$u20$core..ops..index..Index$LT$I$GT$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 27, + "kind": "ZeroSized", + "ty": 34 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 26, + "kind": "ZeroSized", + "ty": 64 + }, + "span": 172, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 172 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 175 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 176 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 176 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 177 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 3, + "projection": [] + } + }, + 61 + ] + } + ] + }, + "span": 178 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 6, + "projection": [] + } + ] + } + ] + }, + "span": 177 + }, + { + "kind": { + "StorageLive": 7 + }, + "span": 179 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 4, + "projection": [] + } + }, + 61 + ] + } + ] + }, + "span": 178 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 179 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 6, + "projection": [] + } + }, + { + "Copy": { + "local": 8, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 28, + "kind": "ZeroSized", + "ty": 65 + }, + "span": 173, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 174 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 7 + }, + "span": 181 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 181 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 176 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 176 + } + ], + "terminator": { + "kind": "Return", + "span": 180 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 182, + "ty": 46 + }, + { + "mutability": "Not", + "span": 183, + "ty": 60 + }, + { + "mutability": "Not", + "span": 184, + "ty": 66 + }, + { + "mutability": "Not", + "span": 172, + "ty": 33 + }, + { + "mutability": "Mut", + "span": 184, + "ty": 33 + }, + { + "mutability": "Mut", + "span": 177, + "ty": 67 + }, + { + "mutability": "Not", + "span": 177, + "ty": 61 + }, + { + "mutability": "Mut", + "span": 179, + "ty": 67 + }, + { + "mutability": "Not", + "span": 179, + "ty": 61 + } + ], + "span": 194, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 183 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 184 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 185 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 1, + "span": 186 + }, + "value": { + "Const": { + "const_": { + "id": 27, + "kind": "ZeroSized", + "ty": 34 + }, + "span": 29, + "user_ty": null + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "slice", + "source_info": { + "scope": 2, + "span": 46 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 3, + "span": 187 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 3, + "span": 188 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 4, + "span": 189 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 5, + "span": 189 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 6, + "span": 190 + }, + "value": { + "Place": { + "local": 5, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 6, + "span": 191 + }, + "value": { + "Place": { + "local": 7, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 7, + "span": 192 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 7, + "span": 193 + }, + "value": { + "Place": { + "local": 8, + "projection": [] + } + } + } + ] + } + ], + "id": 14, + "name": ">::eq" + } + }, + "symbol_name": "_ZN77_$LT$alloc..string..String$u20$as$u20$core..cmp..PartialEq$LT$$RF$str$GT$$GT$2eq17h" + } + ] +} diff --git a/tests/integration/failing/std-to-string.rs b/tests/integration/failing/std-to-string.rs new file mode 100644 index 0000000..5cbb432 --- /dev/null +++ b/tests/integration/failing/std-to-string.rs @@ -0,0 +1,4 @@ +fn main() { + let a:String = "abcd".to_string(); + assert!(a == "abcd"); +} \ No newline at end of file diff --git a/tests/integration/failing/std-to-string.smir.json.expected b/tests/integration/failing/std-to-string.smir.json.expected new file mode 100644 index 0000000..e69de29 diff --git a/tests/integration/failing/str-empty.rs b/tests/integration/failing/str-empty.rs new file mode 100644 index 0000000..a92a02e --- /dev/null +++ b/tests/integration/failing/str-empty.rs @@ -0,0 +1,5 @@ +fn main() { + let a = ""; + + assert!(a == ""); +} \ No newline at end of file diff --git a/tests/integration/failing/str-empty.smir.json.expected b/tests/integration/failing/str-empty.smir.json.expected new file mode 100644 index 0000000..4bba89e --- /dev/null +++ b/tests/integration/failing/str-empty.smir.json.expected @@ -0,0 +1,2402 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Not", + "provenance": { + "ptrs": [ + [ + 0, + 7 + ] + ] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 32, + 61, + 61, + 32, + 34, + 34 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3str6traits54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$str$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN73_$LT$$u5b$A$u5d$$u20$as$u20$core..slice..cmp..SlicePartialEq$LT$B$GT$$GT$5equal17h" + } + ], + [ + { + "NormalSym": "_ZN4core3cmp5impls69_$LT$impl$u20$core..cmp..PartialEq$LT$$RF$B$GT$$u20$for$u20$$RF$A$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 42 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 41 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 44 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 45, + "ty": 21 + }, + { + "mutability": "Not", + "span": 46, + "ty": 22 + }, + { + "mutability": "Not", + "span": 47, + "ty": 22 + }, + { + "mutability": "Mut", + "span": 46, + "ty": 23 + }, + { + "mutability": "Mut", + "span": 47, + "ty": 23 + } + ], + "span": 48, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 46 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 47 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 3, + "name": "std::cmp::impls::::eq" + } + }, + "symbol_name": "_ZN4core3cmp5impls69_$LT$impl$u20$core..cmp..PartialEq$LT$$RF$B$GT$$u20$for$u20$$RF$A$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 49, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 16 + }, + { + "mutability": "Not", + "span": 49, + "ty": 25 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 1 + }, + { + "mutability": "Not", + "span": 49, + "ty": 7 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 49, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 16 + }, + { + "mutability": "Not", + "span": 49, + "ty": 12 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + }, + { + "mutability": "Not", + "span": 49, + "ty": 27 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 50 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 50, + "ty": 1 + }, + { + "mutability": "Not", + "span": 50, + "ty": 25 + } + ], + "span": 50, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 53 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 54 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 4, + "projection": [] + } + ] + } + ] + }, + "span": 53 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 55 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 54 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 6, + "projection": [] + } + ] + } + ] + }, + "span": 55 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 4, + "projection": [] + } + }, + { + "Copy": { + "local": 6, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 51, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 52 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 5 + }, + "span": 57 + }, + { + "kind": { + "StorageDead": 3 + }, + "span": 57 + } + ], + "terminator": { + "kind": "Return", + "span": 56 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 58, + "ty": 21 + }, + { + "mutability": "Not", + "span": 59, + "ty": 23 + }, + { + "mutability": "Not", + "span": 60, + "ty": 23 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 30 + }, + { + "mutability": "Not", + "span": 53, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 55, + "ty": 30 + }, + { + "mutability": "Not", + "span": 55, + "ty": 29 + } + ], + "span": 64, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 59 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 60 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 61 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 2, + "span": 61 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 3, + "span": 46 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 3, + "span": 47 + }, + "value": { + "Place": { + "local": 5, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 4, + "span": 62 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 4, + "span": 63 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "core::str::traits::::eq" + } + }, + "symbol_name": "_ZN4core3str6traits54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$str$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 66, + "user_ty": null + } + } + } + ] + }, + "span": 66 + } + ], + "terminator": { + "kind": "Return", + "span": 65 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 67, + "ty": 17 + }, + { + "mutability": "Not", + "span": 68, + "ty": 1 + } + ], + "span": 69, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 7, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 23 + }, + "span": 71, + "user_ty": null + } + } + } + ] + }, + "span": 71 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 72 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 22 + }, + "span": 73, + "user_ty": null + } + } + } + ] + }, + "span": 73 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 31 + }, + "span": 70, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 70 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 70 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 74 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 2 + ] + ] + } + } + }, + "ty": 23 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 32 + }, + "span": 75, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 75 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 76, + "ty": 1 + }, + { + "mutability": "Not", + "span": 77, + "ty": 23 + }, + { + "mutability": "Mut", + "span": 70, + "ty": 21 + }, + { + "mutability": "Mut", + "span": 72, + "ty": 22 + }, + { + "mutability": "Mut", + "span": 73, + "ty": 22 + }, + { + "mutability": "Mut", + "span": 75, + "ty": 33 + } + ], + "span": 78, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 77 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + }, + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 3 + ] + ] + } + } + }, + "ty": 23 + }, + "span": 73, + "user_ty": null + } + } + } + ] + }, + "span": 73 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 73 + } + ], + "terminator": { + "kind": "Return", + "span": 73 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 73, + "ty": 22 + }, + { + "mutability": "Mut", + "span": 73, + "ty": 23 + } + ], + "span": 73, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 8, + "name": "main" + } + }, + "symbol_name": "_ZN9str_empty4main17h" + } + ] +} diff --git a/tests/integration/failing/str-trivial.rs b/tests/integration/failing/str-trivial.rs new file mode 100644 index 0000000..b9bd092 --- /dev/null +++ b/tests/integration/failing/str-trivial.rs @@ -0,0 +1,5 @@ +fn main() { + let a = "a"; + + assert!(a == "a"); +} \ No newline at end of file diff --git a/tests/integration/failing/str-trivial.smir.json.expected b/tests/integration/failing/str-trivial.smir.json.expected new file mode 100644 index 0000000..896b985 --- /dev/null +++ b/tests/integration/failing/str-trivial.smir.json.expected @@ -0,0 +1,2409 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Not", + "provenance": { + "ptrs": [ + [ + 0, + 7 + ] + ] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 32, + 61, + 61, + 32, + 34, + 97, + 34 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3str6traits54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$str$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN73_$LT$$u5b$A$u5d$$u20$as$u20$core..slice..cmp..SlicePartialEq$LT$B$GT$$GT$5equal17h" + } + ], + [ + { + "NormalSym": "_ZN4core3cmp5impls69_$LT$impl$u20$core..cmp..PartialEq$LT$$RF$B$GT$$u20$for$u20$$RF$A$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 23 + }, + "span": 71, + "user_ty": null + } + } + } + ] + }, + "span": 71 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 72 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 22 + }, + "span": 73, + "user_ty": null + } + } + } + ] + }, + "span": 73 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 31 + }, + "span": 70, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 70 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 70 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 74 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 2 + ] + ] + } + } + }, + "ty": 23 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 32 + }, + "span": 75, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 75 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 76, + "ty": 1 + }, + { + "mutability": "Not", + "span": 77, + "ty": 23 + }, + { + "mutability": "Mut", + "span": 70, + "ty": 21 + }, + { + "mutability": "Mut", + "span": 72, + "ty": 22 + }, + { + "mutability": "Mut", + "span": 73, + "ty": 22 + }, + { + "mutability": "Mut", + "span": 75, + "ty": 33 + } + ], + "span": 78, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 77 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + }, + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 3 + ] + ] + } + } + }, + "ty": 23 + }, + "span": 73, + "user_ty": null + } + } + } + ] + }, + "span": 73 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 73 + } + ], + "terminator": { + "kind": "Return", + "span": 73 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 73, + "ty": 22 + }, + { + "mutability": "Mut", + "span": 73, + "ty": 23 + } + ], + "span": 73, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 8, + "name": "main" + } + }, + "symbol_name": "_ZN11str_trivial4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 42 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 41 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 44 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 45, + "ty": 21 + }, + { + "mutability": "Not", + "span": 46, + "ty": 22 + }, + { + "mutability": "Not", + "span": 47, + "ty": 22 + }, + { + "mutability": "Mut", + "span": 46, + "ty": 23 + }, + { + "mutability": "Mut", + "span": 47, + "ty": 23 + } + ], + "span": 48, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 46 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 47 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 3, + "name": "std::cmp::impls::::eq" + } + }, + "symbol_name": "_ZN4core3cmp5impls69_$LT$impl$u20$core..cmp..PartialEq$LT$$RF$B$GT$$u20$for$u20$$RF$A$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 49, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 16 + }, + { + "mutability": "Not", + "span": 49, + "ty": 25 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 1 + }, + { + "mutability": "Not", + "span": 49, + "ty": 7 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 49, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 16 + }, + { + "mutability": "Not", + "span": 49, + "ty": 12 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + }, + { + "mutability": "Not", + "span": 49, + "ty": 27 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 50 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 50, + "ty": 1 + }, + { + "mutability": "Not", + "span": 50, + "ty": 25 + } + ], + "span": 50, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 53 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 54 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 4, + "projection": [] + } + ] + } + ] + }, + "span": 53 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 55 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + 29 + ] + } + ] + }, + "span": 54 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 6, + "projection": [] + } + ] + } + ] + }, + "span": 55 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 4, + "projection": [] + } + }, + { + "Copy": { + "local": 6, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 51, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 52 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 5 + }, + "span": 57 + }, + { + "kind": { + "StorageDead": 3 + }, + "span": 57 + } + ], + "terminator": { + "kind": "Return", + "span": 56 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 58, + "ty": 21 + }, + { + "mutability": "Not", + "span": 59, + "ty": 23 + }, + { + "mutability": "Not", + "span": 60, + "ty": 23 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 30 + }, + { + "mutability": "Not", + "span": 53, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 55, + "ty": 30 + }, + { + "mutability": "Not", + "span": 55, + "ty": 29 + } + ], + "span": 64, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 59 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 60 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 61 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 2, + "span": 61 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 3, + "span": 46 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 3, + "span": 47 + }, + "value": { + "Place": { + "local": 5, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 4, + "span": 62 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 4, + "span": 63 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "core::str::traits::::eq" + } + }, + "symbol_name": "_ZN4core3str6traits54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$str$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 66, + "user_ty": null + } + } + } + ] + }, + "span": 66 + } + ], + "terminator": { + "kind": "Return", + "span": 65 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 67, + "ty": 17 + }, + { + "mutability": "Not", + "span": 68, + "ty": 1 + } + ], + "span": 69, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 7, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/normalise-filter.jq b/tests/integration/normalise-filter.jq new file mode 100644 index 0000000..31dd8a2 --- /dev/null +++ b/tests/integration/normalise-filter.jq @@ -0,0 +1,23 @@ +# Remove the hashes at the end of mangled names +.functions = ( [ .functions[] | if .[1].NormalSym then .[1].NormalSym = .[1].NormalSym[:-17] else . end ] ) + | .items = ( [ .items[] | if .symbol_name then .symbol_name = .symbol_name[:-17] else . end ] ) + | +# Apply the normalisation filter +{ allocs: + ( [ .allocs[] ] +# sort allocs by their ID + | sort_by(.[0]) + | map(del(.[0])) + ), + functions: + ( [ .functions[] ] +# sort functions by their ID (int, first in list) + | sort_by(.[0]) + | map(del(.[0])) + ), + items: + ( [ .items[] ] +# sort items by symbol name they refer to and by the function name for functions + | sort_by(.symbol_name, .mono_item_kind.MonoItemFn.name) + ) +} \ No newline at end of file diff --git a/tests/integration/programs/assert_eq.rs b/tests/integration/programs/assert_eq.rs new file mode 100644 index 0000000..f4bb6f3 --- /dev/null +++ b/tests/integration/programs/assert_eq.rs @@ -0,0 +1,6 @@ +fn main() { + let a = 42; + let b = 3 + 39; + + assert_eq!(b, a); +} \ No newline at end of file diff --git a/tests/integration/programs/assert_eq.smir.json.expected b/tests/integration/programs/assert_eq.smir.json.expected new file mode 100644 index 0000000..be856ca --- /dev/null +++ b/tests/integration/programs/assert_eq.smir.json.expected @@ -0,0 +1,2045 @@ +{ + "allocs": [], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking13assert_failed17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 50, + "user_ty": null + } + } + } + ] + }, + "span": 50 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 39, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 3, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 39, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 3, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 49 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [] + } + ] + } + ] + }, + "span": 52 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 53 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Aggregate": [ + "Tuple", + [ + { + "Move": { + "local": 5, + "projection": [] + } + }, + { + "Move": { + "local": 6, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 54 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 4, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 55 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 4, + "projection": [ + { + "Field": [ + 1, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 56 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 7, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 57 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 8, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 58 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 10, + "projection": [] + } + }, + { + "Move": { + "local": 11, + "projection": [] + } + } + ] + } + ] + }, + "span": 51 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 9, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 51 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 59 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 7, + 0, + [], + null, + null + ] + }, + [] + ] + } + ] + }, + "span": 62 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 8, + 0, + [ + { + "Type": 27 + } + ], + null, + null + ] + }, + [] + ] + } + ] + }, + "span": 63 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 12, + "projection": [] + } + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + { + "Copy": { + "local": 8, + "projection": [] + } + }, + { + "Move": { + "local": 14, + "projection": [] + } + } + ], + "destination": { + "local": 13, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 60, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 61 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 64, + "ty": 1 + }, + { + "mutability": "Not", + "span": 65, + "ty": 16 + }, + { + "mutability": "Not", + "span": 66, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 25 + }, + { + "mutability": "Not", + "span": 55, + "ty": 25 + }, + { + "mutability": "Not", + "span": 56, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 57, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 58, + "ty": 16 + }, + { + "mutability": "Not", + "span": 67, + "ty": 30 + }, + { + "mutability": "Not", + "span": 61, + "ty": 31 + }, + { + "mutability": "Mut", + "span": 63, + "ty": 32 + } + ], + "span": 68, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 65 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 66 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "left_val", + "source_info": { + "scope": 3, + "span": 55 + }, + "value": { + "Place": { + "local": 7, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "right_val", + "source_info": { + "scope": 3, + "span": 56 + }, + "value": { + "Place": { + "local": 8, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "kind", + "source_info": { + "scope": 4, + "span": 67 + }, + "value": { + "Place": { + "local": 12, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN9assert_eq4main17h" + } + ] +} diff --git a/tests/integration/programs/binop.rs b/tests/integration/programs/binop.rs new file mode 100644 index 0000000..c132e75 --- /dev/null +++ b/tests/integration/programs/binop.rs @@ -0,0 +1,74 @@ +fn test_binop(x:i32, y:i32) -> () { +// Arithmetic + // Addition + assert!(x + y == 52); + assert!(52 == x + y); + assert!(x + y == y + x); + + // Subtraction + assert!(x - y == 32); + assert!(y - x == -32); + assert!(y - x != x - y); + + // Multiplication + assert!(x * y == 420); + assert!(x * -y == -420); + assert!(-x * y == -420); + assert!(-x * -y == 420); + + // Division + // assert!(420 / 10 == 42); // FAILING SEE div.rs and div.mir + + // Modulo + // assert!(x % 10 == 2); // FAILING SEE modulo.rs and modulo.mir + +// Bitwise + // Xor + assert!(1 ^ 2 == 3); + assert!(1 ^ 3 == 2); + + // Or + assert!(1 | 2 == 3); + assert!(1 | 3 == 3); + + // And + assert!(1 & 2 == 0); + assert!(1 & 3 == 1); + + // // Shl + assert!(2 << 1 == 4); + // assert!(-128_i8 << 1 == 0); FAILS SEE shl_min.rs and shl_min.mir + // assert!(-32768_i16 << 1 == 0); FAILS SEE shl_min.rs and shl_min.mir + // assert!(-2147483648_i32 << 1 == 0); FAILS SEE shl_min.rs and shl_min.mir + // assert!(-9223372036854775808_i64 << 1 == 0); FAILS SEE shl_min.rs and shl_min.mir + // assert!(-17014118346046923173168730371588410572_i128 << 1 == 0); FAILS SEE shl_min.rs and shl_min.mir + + + // // Shr + assert!(2 >> 1 == 1); + assert!(3 >> 1 == 1); + assert!(1 >> 1 == 0); + +// Comparisions + // Less Then + assert!(x < x + y); + + // Less Then or Equal + assert!(x <= x + y); + assert!(x <= x + y - y); + + // Greater Then + assert!(x + y > x); + + // Greater Then or Equal + assert!(x + y >= x); + assert!(x + y - y >= x); +} + + +fn main() { + let x = 42; + let y = 10; + test_binop(x, y); + return (); +} diff --git a/tests/integration/programs/binop.smir.json.expected b/tests/integration/programs/binop.smir.json.expected new file mode 100644 index 0000000..39e9921 --- /dev/null +++ b/tests/integration/programs/binop.smir.json.expected @@ -0,0 +1,9651 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 43, + 32, + 121, + 32, + 61, + 61, + 32, + 53, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 53, + 50, + 32, + 61, + 61, + 32, + 120, + 32, + 43, + 32, + 121 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 43, + 32, + 121, + 32, + 61, + 61, + 32, + 121, + 32, + 43, + 32, + 120 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 45, + 32, + 121, + 32, + 61, + 61, + 32, + 51, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 121, + 32, + 45, + 32, + 120, + 32, + 61, + 61, + 32, + 45, + 51, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 121, + 32, + 45, + 32, + 120, + 32, + 33, + 61, + 32, + 120, + 32, + 45, + 32, + 121 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 42, + 32, + 121, + 32, + 61, + 61, + 32, + 52, + 50, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 42, + 32, + 45, + 121, + 32, + 61, + 61, + 32, + 45, + 52, + 50, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 45, + 120, + 32, + 42, + 32, + 121, + 32, + 61, + 61, + 32, + 45, + 52, + 50, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 45, + 120, + 32, + 42, + 32, + 45, + 121, + 32, + 61, + 61, + 32, + 52, + 50, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 49, + 32, + 94, + 32, + 50, + 32, + 61, + 61, + 32, + 51 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 49, + 32, + 94, + 32, + 51, + 32, + 61, + 61, + 32, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 49, + 32, + 124, + 32, + 50, + 32, + 61, + 61, + 32, + 51 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 49, + 32, + 124, + 32, + 51, + 32, + 61, + 61, + 32, + 51 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 49, + 32, + 38, + 32, + 50, + 32, + 61, + 61, + 32, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 49, + 32, + 38, + 32, + 51, + 32, + 61, + 61, + 32, + 49 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 50, + 32, + 60, + 60, + 32, + 49, + 32, + 61, + 61, + 32, + 52 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 50, + 32, + 62, + 62, + 32, + 49, + 32, + 61, + 61, + 32, + 49 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 51, + 32, + 62, + 62, + 32, + 49, + 32, + 61, + 61, + 32, + 49 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 49, + 32, + 62, + 62, + 32, + 49, + 32, + 61, + 61, + 32, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 60, + 32, + 120, + 32, + 43, + 32, + 121 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 60, + 61, + 32, + 120, + 32, + 43, + 32, + 121 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 60, + 61, + 32, + 120, + 32, + 43, + 32, + 121, + 32, + 45, + 32, + 121 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 43, + 32, + 121, + 32, + 62, + 32, + 120 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 43, + 32, + 121, + 32, + 62, + 61, + 32, + 120 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 120, + 32, + 43, + 32, + 121, + 32, + 45, + 32, + 121, + 32, + 62, + 61, + 32, + 120 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NormalSym": "_ZN5binop10test_binop17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 47 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 47 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 47 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 3, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 52, + 2 + ] + ], + "otherwise": 3 + } + } + }, + "span": 48 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 7, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 50, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 50 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 7, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 6, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 52, + 5 + ] + ], + "otherwise": 6 + } + } + }, + "span": 51 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 52 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 11, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 7, + "unwind": "Continue" + } + }, + "span": 52 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 8, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 53, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 53 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 11, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 52 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 54 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 13, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + }, + "target": 8, + "unwind": "Continue" + } + }, + "span": 54 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 13, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 54 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 10, + "projection": [] + } + }, + { + "Move": { + "local": 12, + "projection": [] + } + } + ] + } + ] + }, + "span": 55 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 9, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 10 + ] + ], + "otherwise": 9 + } + } + }, + "span": 55 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 16, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 56 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 16, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 11, + "unwind": "Continue" + } + }, + "span": 56 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 2 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 14, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 57, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 57 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 16, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 56 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 15, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 32, + 12 + ] + ], + "otherwise": 13 + } + } + }, + "span": 58 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 19, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 59 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 19, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + }, + "target": 14, + "unwind": "Continue" + } + }, + "span": 59 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 3 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 17, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 60, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 60 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 18, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 19, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 59 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 18, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 4294967264, + 15 + ] + ], + "otherwise": 16 + } + } + }, + "span": 61 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 23, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 62 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 23, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + }, + "target": 17, + "unwind": "Continue" + } + }, + "span": 62 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 4 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 20, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 63, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 63 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 22, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 23, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 62 + }, + { + "kind": { + "Assign": [ + { + "local": 25, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 64 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 25, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 18, + "unwind": "Continue" + } + }, + "span": 64 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 24, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 25, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 64 + }, + { + "kind": { + "Assign": [ + { + "local": 21, + "projection": [] + }, + { + "BinaryOp": [ + "Ne", + { + "Move": { + "local": 22, + "projection": [] + } + }, + { + "Move": { + "local": 24, + "projection": [] + } + } + ] + } + ] + }, + "span": 65 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 21, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 20 + ] + ], + "otherwise": 19 + } + } + }, + "span": 65 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 28, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Mul", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 66 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 28, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Mul", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 21, + "unwind": "Continue" + } + }, + "span": 66 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 5 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 26, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 67, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 67 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 27, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 28, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 66 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 27, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 420, + 22 + ] + ], + "otherwise": 23 + } + } + }, + "span": 68 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 32, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 69, + "user_ty": null + } + } + ] + } + ] + }, + "span": 69 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 32, + "projection": [] + } + }, + "expected": false, + "msg": { + "OverflowNeg": { + "Copy": { + "local": 2, + "projection": [] + } + } + }, + "target": 24, + "unwind": "Continue" + } + }, + "span": 69 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 17, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 6 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 29, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 70, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 70 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 31, + "projection": [] + }, + { + "UnaryOp": [ + "Neg", + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 69 + }, + { + "kind": { + "Assign": [ + { + "local": 33, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Mul", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 31, + "projection": [] + } + } + ] + } + ] + }, + "span": 71 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 33, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Mul", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 31, + "projection": [] + } + } + ] + }, + "target": 25, + "unwind": "Continue" + } + }, + "span": 71 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 30, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 33, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 71 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 30, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 4294966876, + 26 + ] + ], + "otherwise": 27 + } + } + }, + "span": 72 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 37, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 73, + "user_ty": null + } + } + ] + } + ] + }, + "span": 73 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 37, + "projection": [] + } + }, + "expected": false, + "msg": { + "OverflowNeg": { + "Copy": { + "local": 1, + "projection": [] + } + } + }, + "target": 28, + "unwind": "Continue" + } + }, + "span": 73 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 18, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 7 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 34, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 74, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 74 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 36, + "projection": [] + }, + { + "UnaryOp": [ + "Neg", + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 73 + }, + { + "kind": { + "Assign": [ + { + "local": 38, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Mul", + { + "Copy": { + "local": 36, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 75 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 38, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Mul", + { + "Move": { + "local": 36, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 29, + "unwind": "Continue" + } + }, + "span": 75 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 35, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 38, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 75 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 35, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 4294966876, + 30 + ] + ], + "otherwise": 31 + } + } + }, + "span": 76 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 42, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 77, + "user_ty": null + } + } + ] + } + ] + }, + "span": 77 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 42, + "projection": [] + } + }, + "expected": false, + "msg": { + "OverflowNeg": { + "Copy": { + "local": 1, + "projection": [] + } + } + }, + "target": 32, + "unwind": "Continue" + } + }, + "span": 77 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 19, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 8 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 39, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 78, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 78 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 41, + "projection": [] + }, + { + "UnaryOp": [ + "Neg", + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 77 + }, + { + "kind": { + "Assign": [ + { + "local": 44, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 79, + "user_ty": null + } + } + ] + } + ] + }, + "span": 79 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 44, + "projection": [] + } + }, + "expected": false, + "msg": { + "OverflowNeg": { + "Copy": { + "local": 2, + "projection": [] + } + } + }, + "target": 33, + "unwind": "Continue" + } + }, + "span": 79 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 43, + "projection": [] + }, + { + "UnaryOp": [ + "Neg", + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 79 + }, + { + "kind": { + "Assign": [ + { + "local": 45, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Mul", + { + "Copy": { + "local": 41, + "projection": [] + } + }, + { + "Copy": { + "local": 43, + "projection": [] + } + } + ] + } + ] + }, + "span": 80 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 45, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Mul", + { + "Move": { + "local": 41, + "projection": [] + } + }, + { + "Move": { + "local": 43, + "projection": [] + } + } + ] + }, + "target": 34, + "unwind": "Continue" + } + }, + "span": 80 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 40, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 45, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 80 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 40, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 420, + 35 + ] + ], + "otherwise": 36 + } + } + }, + "span": 81 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 47, + "projection": [] + }, + { + "BinaryOp": [ + "BitXor", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 83, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 84, + "user_ty": null + } + } + ] + } + ] + }, + "span": 85 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 47, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 3, + 37 + ] + ], + "otherwise": 38 + } + } + }, + "span": 82 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 22, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 9 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 46, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 86, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 86 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 49, + "projection": [] + }, + { + "BinaryOp": [ + "BitXor", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 88, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 89, + "user_ty": null + } + } + ] + } + ] + }, + "span": 90 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 49, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 2, + 39 + ] + ], + "otherwise": 40 + } + } + }, + "span": 87 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 24, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 10 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 48, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 91, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 91 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 51, + "projection": [] + }, + { + "BinaryOp": [ + "BitOr", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 93, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 94, + "user_ty": null + } + } + ] + } + ] + }, + "span": 95 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 51, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 3, + 41 + ] + ], + "otherwise": 42 + } + } + }, + "span": 92 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 25, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 11 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 50, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 96, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 96 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 53, + "projection": [] + }, + { + "BinaryOp": [ + "BitOr", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 98, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 99, + "user_ty": null + } + } + ] + } + ] + }, + "span": 100 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 53, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 3, + 43 + ] + ], + "otherwise": 44 + } + } + }, + "span": 97 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 26, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 12 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 52, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 101, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 101 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 55, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 103, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 104, + "user_ty": null + } + } + ] + } + ] + }, + "span": 105 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 55, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 45 + ] + ], + "otherwise": 46 + } + } + }, + "span": 102 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 27, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 13 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 54, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 106, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 106 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 57, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 108, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 109, + "user_ty": null + } + } + ] + } + ] + }, + "span": 110 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 57, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 1, + 47 + ] + ], + "otherwise": 48 + } + } + }, + "span": 107 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 28, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 14 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 56, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 111, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 111 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 60, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 113, + "user_ty": null + } + }, + 27 + ] + } + ] + }, + "span": 114 + }, + { + "kind": { + "Assign": [ + { + "local": 61, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Move": { + "local": 60, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 29, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 32, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 114, + "user_ty": null + } + } + ] + } + ] + }, + "span": 114 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 61, + "projection": [] + } + }, + "expected": true, + "msg": { + "Overflow": [ + "Shl", + { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 112, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 113, + "user_ty": null + } + } + ] + }, + "target": 49, + "unwind": "Continue" + } + }, + "span": 114 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 30, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 15 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 58, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 115, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 115 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 59, + "projection": [] + }, + { + "BinaryOp": [ + "Shl", + { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 112, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 113, + "user_ty": null + } + } + ] + } + ] + }, + "span": 114 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 59, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 4, + 50 + ] + ], + "otherwise": 51 + } + } + }, + "span": 116 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 64, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 118, + "user_ty": null + } + }, + 27 + ] + } + ] + }, + "span": 119 + }, + { + "kind": { + "Assign": [ + { + "local": 65, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Move": { + "local": 64, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 29, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 32, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 119, + "user_ty": null + } + } + ] + } + ] + }, + "span": 119 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 65, + "projection": [] + } + }, + "expected": true, + "msg": { + "Overflow": [ + "Shr", + { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 117, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 118, + "user_ty": null + } + } + ] + }, + "target": 52, + "unwind": "Continue" + } + }, + "span": 119 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 31, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 16 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 62, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 120, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 120 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 63, + "projection": [] + }, + { + "BinaryOp": [ + "Shr", + { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 117, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 118, + "user_ty": null + } + } + ] + } + ] + }, + "span": 119 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 63, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 1, + 53 + ] + ], + "otherwise": 54 + } + } + }, + "span": 121 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 68, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 123, + "user_ty": null + } + }, + 27 + ] + } + ] + }, + "span": 124 + }, + { + "kind": { + "Assign": [ + { + "local": 69, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Move": { + "local": 68, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 29, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 32, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 124, + "user_ty": null + } + } + ] + } + ] + }, + "span": 124 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 69, + "projection": [] + } + }, + "expected": true, + "msg": { + "Overflow": [ + "Shr", + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 122, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 123, + "user_ty": null + } + } + ] + }, + "target": 55, + "unwind": "Continue" + } + }, + "span": 124 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 32, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 17 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 66, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 125, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 125 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 67, + "projection": [] + }, + { + "BinaryOp": [ + "Shr", + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 122, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 123, + "user_ty": null + } + } + ] + } + ] + }, + "span": 124 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 67, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 1, + 56 + ] + ], + "otherwise": 57 + } + } + }, + "span": 126 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 72, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 128, + "user_ty": null + } + }, + 27 + ] + } + ] + }, + "span": 129 + }, + { + "kind": { + "Assign": [ + { + "local": 73, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Move": { + "local": 72, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 29, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 32, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 129, + "user_ty": null + } + } + ] + } + ] + }, + "span": 129 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 73, + "projection": [] + } + }, + "expected": true, + "msg": { + "Overflow": [ + "Shr", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 127, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 128, + "user_ty": null + } + } + ] + }, + "target": 58, + "unwind": "Continue" + } + }, + "span": 129 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 33, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 18 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 70, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 130, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 130 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 71, + "projection": [] + }, + { + "BinaryOp": [ + "Shr", + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 127, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 128, + "user_ty": null + } + } + ] + } + ] + }, + "span": 129 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 71, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 59 + ] + ], + "otherwise": 60 + } + } + }, + "span": 131 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 77, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 132 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 77, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 61, + "unwind": "Continue" + } + }, + "span": 132 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 34, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 19 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 74, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 133, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 133 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 76, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 77, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 132 + }, + { + "kind": { + "Assign": [ + { + "local": 75, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 76, + "projection": [] + } + } + ] + } + ] + }, + "span": 134 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 75, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 63 + ] + ], + "otherwise": 62 + } + } + }, + "span": 134 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 81, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 135 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 81, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 64, + "unwind": "Continue" + } + }, + "span": 135 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 35, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 20 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 78, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 136, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 136 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 80, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 81, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 135 + }, + { + "kind": { + "Assign": [ + { + "local": 79, + "projection": [] + }, + { + "BinaryOp": [ + "Le", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 80, + "projection": [] + } + } + ] + } + ] + }, + "span": 137 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 79, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 66 + ] + ], + "otherwise": 65 + } + } + }, + "span": 137 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 86, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 138 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 86, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 67, + "unwind": "Continue" + } + }, + "span": 138 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 36, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 21 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 82, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 139, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 139 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 85, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 86, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 138 + }, + { + "kind": { + "Assign": [ + { + "local": 87, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 85, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 140 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 87, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Move": { + "local": 85, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 68, + "unwind": "Continue" + } + }, + "span": 140 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 84, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 87, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 140 + }, + { + "kind": { + "Assign": [ + { + "local": 83, + "projection": [] + }, + { + "BinaryOp": [ + "Le", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 84, + "projection": [] + } + } + ] + } + ] + }, + "span": 141 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 83, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 70 + ] + ], + "otherwise": 69 + } + } + }, + "span": 141 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 91, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 142 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 91, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 71, + "unwind": "Continue" + } + }, + "span": 142 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 37, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 22 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 88, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 143, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 143 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 90, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 91, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 142 + }, + { + "kind": { + "Assign": [ + { + "local": 89, + "projection": [] + }, + { + "BinaryOp": [ + "Gt", + { + "Move": { + "local": 90, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 144 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 89, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 73 + ] + ], + "otherwise": 72 + } + } + }, + "span": 144 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 95, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 145 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 95, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 74, + "unwind": "Continue" + } + }, + "span": 145 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 38, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 23 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 92, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 146, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 146 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 94, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 95, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 145 + }, + { + "kind": { + "Assign": [ + { + "local": 93, + "projection": [] + }, + { + "BinaryOp": [ + "Ge", + { + "Move": { + "local": 94, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 147 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 93, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 76 + ] + ], + "otherwise": 75 + } + } + }, + "span": 147 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 100, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 148 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 100, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 77, + "unwind": "Continue" + } + }, + "span": 148 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 39, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 24 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 96, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 149, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 149 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 99, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 100, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 148 + }, + { + "kind": { + "Assign": [ + { + "local": 101, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 99, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 150 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 101, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Move": { + "local": 99, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 78, + "unwind": "Continue" + } + }, + "span": 150 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 98, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 101, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 150 + }, + { + "kind": { + "Assign": [ + { + "local": 97, + "projection": [] + }, + { + "BinaryOp": [ + "Ge", + { + "Move": { + "local": 98, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 151 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 97, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 80 + ] + ], + "otherwise": 79 + } + } + }, + "span": 151 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 152 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 40, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 25 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 102, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 153, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 153 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 154, + "ty": 1 + }, + { + "mutability": "Not", + "span": 155, + "ty": 16 + }, + { + "mutability": "Not", + "span": 156, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 47, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 47, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 50, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 55, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 57, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 56, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 56, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 60, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 59, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 59, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 63, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 65, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 62, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 62, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 64, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 64, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 67, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 66, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 66, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 70, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 71, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 69, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 69, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 71, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 74, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 75, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 73, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 73, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 75, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 78, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 80, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 77, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 77, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 79, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 79, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 80, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 86, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 85, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 91, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 90, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 96, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 95, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 101, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 100, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 106, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 105, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 111, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 110, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 115, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 114, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 114, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 114, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 120, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 119, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 119, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 119, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 125, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 124, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 124, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 124, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 130, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 129, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 129, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 129, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 133, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 134, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 132, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 132, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 136, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 137, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 135, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 135, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 139, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 141, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 138, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 138, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 140, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 143, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 144, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 142, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 142, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 146, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 147, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 145, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 145, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 149, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 151, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 150, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 148, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 148, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 150, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 153, + "ty": 29 + } + ], + "span": 157, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "x", + "source_info": { + "scope": 0, + "span": 155 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "y", + "source_info": { + "scope": 0, + "span": 156 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "test_binop" + } + }, + "symbol_name": "_ZN5binop10test_binop17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 42, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 160, + "user_ty": null + } + } + } + ] + }, + "span": 161 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 43, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 162, + "user_ty": null + } + } + } + ] + }, + "span": 163 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 41, + "kind": "ZeroSized", + "ty": 30 + }, + "span": 158, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 159 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 164 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 165, + "ty": 1 + }, + { + "mutability": "Not", + "span": 159, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 161, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 163, + "ty": 16 + } + ], + "span": 168, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "x", + "source_info": { + "scope": 1, + "span": 166 + }, + "value": { + "Const": { + "const_": { + "id": 42, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 160, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "y", + "source_info": { + "scope": 2, + "span": 167 + }, + "value": { + "Const": { + "const_": { + "id": 43, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 162, + "user_ty": null + } + } + } + ] + } + ], + "id": 7, + "name": "main" + } + }, + "symbol_name": "_ZN5binop4main17h" + } + ] +} diff --git a/tests/integration/programs/char-trivial.rs b/tests/integration/programs/char-trivial.rs new file mode 100644 index 0000000..78236fb --- /dev/null +++ b/tests/integration/programs/char-trivial.rs @@ -0,0 +1,5 @@ +fn main() { + let a:char = 'a'; + + assert!(a == 'a'); +} \ No newline at end of file diff --git a/tests/integration/programs/char-trivial.smir.json.expected b/tests/integration/programs/char-trivial.smir.json.expected new file mode 100644 index 0000000..a6e9bab --- /dev/null +++ b/tests/integration/programs/char-trivial.smir.json.expected @@ -0,0 +1,1575 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 32, + 61, + 61, + 32, + 39, + 97, + 39 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 97, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 48, + "user_ty": null + } + } + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 97, + 1 + ] + ], + "otherwise": 2 + } + } + }, + "span": 47 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 50 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 51, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 51 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 52, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 27 + } + ], + "span": 54, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 53 + }, + "value": { + "Const": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 97, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 48, + "user_ty": null + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN12char_trivial4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/closure-args.rs b/tests/integration/programs/closure-args.rs new file mode 100644 index 0000000..cf91f52 --- /dev/null +++ b/tests/integration/programs/closure-args.rs @@ -0,0 +1,5 @@ +fn main() { + let sum = |x, y| -> i32 { x + y }; + + assert!(sum(20, 22) == 42); +} \ No newline at end of file diff --git a/tests/integration/programs/closure-args.smir.json.expected b/tests/integration/programs/closure-args.smir.json.expected new file mode 100644 index 0000000..6baf4e6 --- /dev/null +++ b/tests/integration/programs/closure-args.smir.json.expected @@ -0,0 +1,1868 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 115, + 117, + 109, + 40, + 50, + 48, + 44, + 32, + 50, + 50, + 41, + 32, + 61, + 61, + 32, + 52, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN12closure_args4main28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 47 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Aggregate": [ + "Tuple", + [ + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 20, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 22, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 50, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 47, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 48 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 42, + 2 + ] + ], + "otherwise": 3 + } + } + }, + "span": 51 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 52 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 53, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 53 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 54, + "ty": 1 + }, + { + "mutability": "Not", + "span": 55, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 47, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 30 + } + ], + "span": 56, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "sum", + "source_info": { + "scope": 1, + "span": 55 + }, + "value": { + "Const": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN12closure_args4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 3, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 3, + "projection": [] + } + } + ] + } + ] + }, + "span": 57 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 1, + 31 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 3, + "projection": [] + } + } + ] + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 57 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 57 + } + ], + "terminator": { + "kind": "Return", + "span": 58 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 59, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 60, + "ty": 28 + }, + { + "mutability": "Not", + "span": 61, + "ty": 16 + }, + { + "mutability": "Not", + "span": 62, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 57, + "ty": 32 + } + ], + "span": 60, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 2, + "composite": null, + "name": "x", + "source_info": { + "scope": 0, + "span": 61 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "y", + "source_info": { + "scope": 0, + "span": 62 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": "main::{closure#0}" + } + }, + "symbol_name": "_ZN12closure_args4main28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/closure-no-args.rs b/tests/integration/programs/closure-no-args.rs new file mode 100644 index 0000000..7ec541c --- /dev/null +++ b/tests/integration/programs/closure-no-args.rs @@ -0,0 +1,5 @@ +fn main() { + let sum = || -> u32 { 42 }; + + assert!(sum() == 42); +} \ No newline at end of file diff --git a/tests/integration/programs/closure-no-args.smir.json.expected b/tests/integration/programs/closure-no-args.smir.json.expected new file mode 100644 index 0000000..9d8e06f --- /dev/null +++ b/tests/integration/programs/closure-no-args.smir.json.expected @@ -0,0 +1,1688 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 115, + 117, + 109, + 40, + 41, + 32, + 61, + 61, + 32, + 52, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN15closure_no_args4main28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 47 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 47, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 48 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 42, + 2 + ] + ], + "otherwise": 3 + } + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 50 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 26 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 4, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 51, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 51 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 52, + "ty": 1 + }, + { + "mutability": "Not", + "span": 53, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 47, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 30 + } + ], + "span": 54, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "sum", + "source_info": { + "scope": 1, + "span": 53 + }, + "value": { + "Const": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN15closure_no_args4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 28 + }, + "span": 56, + "user_ty": null + } + } + } + ] + }, + "span": 56 + } + ], + "terminator": { + "kind": "Return", + "span": 55 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 57, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 58, + "ty": 29 + } + ], + "span": 58, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 7, + "name": "main::{closure#0}" + } + }, + "symbol_name": "_ZN15closure_no_args4main28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/const-arithm-simple.rs b/tests/integration/programs/const-arithm-simple.rs new file mode 100644 index 0000000..251d6b6 --- /dev/null +++ b/tests/integration/programs/const-arithm-simple.rs @@ -0,0 +1,12 @@ +fn test(x: usize, y:usize) -> bool { + return x > y; +} + + +fn main() { + let x:usize = 42; + let y:usize = 0; + let z:bool = test(x, y); + assert!(z); + return (); +} diff --git a/tests/integration/programs/const-arithm-simple.smir.json.expected b/tests/integration/programs/const-arithm-simple.smir.json.expected new file mode 100644 index 0000000..a5c6988 --- /dev/null +++ b/tests/integration/programs/const-arithm-simple.smir.json.expected @@ -0,0 +1,1831 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 122 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN19const_arithm_simple4test17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 42, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 55, + "user_ty": null + } + } + } + ] + }, + "span": 56 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 57, + "user_ty": null + } + } + } + ] + }, + "span": 58 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 53, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 54 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 3 + } + } + }, + "span": 59 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 28 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 4, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 60, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 60 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 61 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 62, + "ty": 1 + }, + { + "mutability": "Not", + "span": 63, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 56, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 58, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 60, + "ty": 29 + } + ], + "span": 66, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "x", + "source_info": { + "scope": 1, + "span": 64 + }, + "value": { + "Const": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 42, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 55, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "y", + "source_info": { + "scope": 2, + "span": 65 + }, + "value": { + "Const": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 57, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "z", + "source_info": { + "scope": 3, + "span": 63 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": "main" + } + }, + "symbol_name": "_ZN19const_arithm_simple4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "BinaryOp": [ + "Gt", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": "Return", + "span": 47 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 24 + }, + { + "mutability": "Not", + "span": 50, + "ty": 25 + }, + { + "mutability": "Not", + "span": 51, + "ty": 25 + } + ], + "span": 52, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "x", + "source_info": { + "scope": 0, + "span": 50 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "y", + "source_info": { + "scope": 0, + "span": 51 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "test" + } + }, + "symbol_name": "_ZN19const_arithm_simple4test17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/div.rs b/tests/integration/programs/div.rs new file mode 100644 index 0000000..616292c --- /dev/null +++ b/tests/integration/programs/div.rs @@ -0,0 +1,3 @@ +fn main() { + assert!(420 / 10 ==42); +} \ No newline at end of file diff --git a/tests/integration/programs/div.smir.json.expected b/tests/integration/programs/div.smir.json.expected new file mode 100644 index 0000000..7ce57f9 --- /dev/null +++ b/tests/integration/programs/div.smir.json.expected @@ -0,0 +1,1942 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 52, + 50, + 48, + 32, + 47, + 32, + 49, + 48, + 32, + 61, + 61, + 32, + 52, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 2, + "projection": [] + } + }, + "expected": false, + "msg": { + "DivisionByZero": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 164, + 1, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 48 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 255, + 255, + 255, + 255 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 48 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 164, + 1, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 48 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 5, + "projection": [] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Div", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 164, + 1, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + } + ] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 48 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "BinaryOp": [ + "Div", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 164, + 1, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + } + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 42, + 3 + ] + ], + "otherwise": 4 + } + } + }, + "span": 50 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 51 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 25 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 6, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 52, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 52 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 53, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 27 + } + ], + "span": 54, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN3div4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/double-ref-deref.rs b/tests/integration/programs/double-ref-deref.rs new file mode 100644 index 0000000..a91f8ac --- /dev/null +++ b/tests/integration/programs/double-ref-deref.rs @@ -0,0 +1,7 @@ +fn main() { + let a = 42; + let b = &a; + let c = &b; + + assert!(**c == 42); +} \ No newline at end of file diff --git a/tests/integration/programs/double-ref-deref.smir.json.expected b/tests/integration/programs/double-ref-deref.smir.json.expected new file mode 100644 index 0000000..53d05f1 --- /dev/null +++ b/tests/integration/programs/double-ref-deref.smir.json.expected @@ -0,0 +1,1693 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 42, + 42, + 99, + 32, + 61, + 61, + 32, + 52, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + } + ] + }, + "span": 48 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 49 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [] + } + ] + } + ] + }, + "span": 50 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "CopyForDeref": { + "local": 3, + "projection": [ + "Deref" + ] + } + } + ] + }, + "span": 51 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 6, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 51 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 4, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 42, + 1 + ] + ], + "otherwise": 2 + } + } + }, + "span": 47 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 52 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 25 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 53, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 53 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 54, + "ty": 1 + }, + { + "mutability": "Not", + "span": 55, + "ty": 16 + }, + { + "mutability": "Not", + "span": 56, + "ty": 26 + }, + { + "mutability": "Not", + "span": 57, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 57, + "ty": 26 + } + ], + "span": 58, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 55 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 56 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "c", + "source_info": { + "scope": 3, + "span": 57 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN16double_ref_deref4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/enum.rs b/tests/integration/programs/enum.rs new file mode 100644 index 0000000..8b020d2 --- /dev/null +++ b/tests/integration/programs/enum.rs @@ -0,0 +1,10 @@ +#![allow(unused)] +#![allow(dead_code)] +enum Letter { + A, + B, +} + +fn main() { + let a = Letter::A; +} \ No newline at end of file diff --git a/tests/integration/programs/enum.smir.json.expected b/tests/integration/programs/enum.smir.json.expected new file mode 100644 index 0000000..6bb4000 --- /dev/null +++ b/tests/integration/programs/enum.smir.json.expected @@ -0,0 +1,1397 @@ +{ + "allocs": [], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 7, + 0, + [], + null, + null + ] + }, + [] + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": "Return", + "span": 47 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 1 + }, + { + "mutability": "Not", + "span": 50, + "ty": 24 + } + ], + "span": 51, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 50 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN4enum4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/fibonacci.rs b/tests/integration/programs/fibonacci.rs new file mode 100644 index 0000000..aa06798 --- /dev/null +++ b/tests/integration/programs/fibonacci.rs @@ -0,0 +1,13 @@ +fn fibonacci(n:u32) -> u32 { + match n { + 0 => 0, + 1 => 1, + _ => fibonacci(n - 2) + fibonacci(n - 1), + } +} + +fn main() { + let ans = fibonacci(5); + + assert!(ans == 5); +} \ No newline at end of file diff --git a/tests/integration/programs/fibonacci.smir.json.expected b/tests/integration/programs/fibonacci.smir.json.expected new file mode 100644 index 0000000..b716cd6 --- /dev/null +++ b/tests/integration/programs/fibonacci.smir.json.expected @@ -0,0 +1,2249 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 110, + 115, + 32, + 61, + 61, + 32, + 53 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN9fibonacci9fibonacci17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 5, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 65, + "user_ty": null + } + } + ], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 64, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 66 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 5, + 2 + ] + ], + "otherwise": 3 + } + } + }, + "span": 67 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 68 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 29 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 69, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 69 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 70, + "ty": 1 + }, + { + "mutability": "Not", + "span": 71, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 69, + "ty": 30 + } + ], + "span": 72, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "ans", + "source_info": { + "scope": 1, + "span": 71 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": "main" + } + }, + "symbol_name": "_ZN9fibonacci4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ], + [ + 1, + 2 + ] + ], + "otherwise": 1 + } + } + }, + "span": 47 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 48, + "user_ty": null + } + } + ] + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 50, + "user_ty": null + } + } + } + ] + }, + "span": 50 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 9 + } + }, + "span": 50 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 51, + "user_ty": null + } + } + } + ] + }, + "span": 51 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 9 + } + }, + "span": 51 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 52, + "user_ty": null + } + }, + "target": 5, + "unwind": "Continue" + } + }, + "span": 53 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 54, + "user_ty": null + } + } + ] + } + ] + }, + "span": 55 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 7, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 54, + "user_ty": null + } + } + ] + }, + "target": 6, + "unwind": "Continue" + } + }, + "span": 55 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 7, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 55 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 56, + "user_ty": null + } + }, + "target": 7, + "unwind": "Continue" + } + }, + "span": 57 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 5, + "projection": [] + } + } + ] + } + ] + }, + "span": 58 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 8, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 5, + "projection": [] + } + } + ] + }, + "target": 8, + "unwind": "Continue" + } + }, + "span": 58 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 8, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 58 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 9 + } + }, + "span": 59 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 60 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 61, + "ty": 25 + }, + { + "mutability": "Not", + "span": 62, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 57, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 55, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 55, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 58, + "ty": 27 + } + ], + "span": 63, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "n", + "source_info": { + "scope": 0, + "span": 62 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "fibonacci" + } + }, + "symbol_name": "_ZN9fibonacci9fibonacci17h" + } + ] +} diff --git a/tests/integration/programs/float.rs b/tests/integration/programs/float.rs new file mode 100644 index 0000000..3e1c38b --- /dev/null +++ b/tests/integration/programs/float.rs @@ -0,0 +1,11 @@ +fn main() { + let a:f32 = 3.5; + let b:f32 = 1.2; + + assert!(a + b == 4.7); + + let c:f64 = 3.5; + let d:f64 = 1.2; + + assert!(c + d == 4.7); +} \ No newline at end of file diff --git a/tests/integration/programs/float.smir.json.expected b/tests/integration/programs/float.smir.json.expected new file mode 100644 index 0000000..6466afa --- /dev/null +++ b/tests/integration/programs/float.smir.json.expected @@ -0,0 +1,2145 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 32, + 43, + 32, + 98, + 32, + 61, + 61, + 32, + 52, + 46, + 55 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 99, + 32, + 43, + 32, + 100, + 32, + 61, + 61, + 32, + 52, + 46, + 55 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 96, + 64 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 48, + "user_ty": null + } + } + } + ] + }, + "span": 49 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 154, + 153, + 153, + 63 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 50, + "user_ty": null + } + } + } + ] + }, + "span": 51 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "BinaryOp": [ + "Add", + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ] + } + ] + }, + "span": 52 + }, + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 102, + 102, + 150, + 64 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 53, + "user_ty": null + } + } + ] + } + ] + }, + "span": 47 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 1 + } + } + }, + "span": 47 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 12, + 64 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 55, + "user_ty": null + } + } + } + ] + }, + "span": 56 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 51, + 51, + 51, + 51, + 51, + 51, + 243, + 63 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 57, + "user_ty": null + } + } + } + ] + }, + "span": 58 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "BinaryOp": [ + "Add", + { + "Move": { + "local": 8, + "projection": [] + } + }, + { + "Move": { + "local": 9, + "projection": [] + } + } + ] + } + ] + }, + "span": 59 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 7, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 205, + 204, + 204, + 204, + 204, + 204, + 18, + 64 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 60, + "user_ty": null + } + } + ] + } + ] + }, + "span": 54 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 6, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 4 + ] + ], + "otherwise": 3 + } + } + }, + "span": 54 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 15, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 61, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 61 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 62 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 17, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 10, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 15, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 63, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 63 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 64, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 47, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 61, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 59, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 56, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 58, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 63, + "ty": 29 + } + ], + "span": 69, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 65 + }, + "value": { + "Const": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 96, + 64 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 48, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 66 + }, + "value": { + "Const": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 154, + 153, + 153, + 63 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 50, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "c", + "source_info": { + "scope": 3, + "span": 67 + }, + "value": { + "Const": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 12, + 64 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 55, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "d", + "source_info": { + "scope": 4, + "span": 68 + }, + "value": { + "Const": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 51, + 51, + 51, + 51, + 51, + 51, + 243, + 63 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 57, + "user_ty": null + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN5float4main17h" + } + ] +} diff --git a/tests/integration/programs/modulo.rs b/tests/integration/programs/modulo.rs new file mode 100644 index 0000000..e76b3ef --- /dev/null +++ b/tests/integration/programs/modulo.rs @@ -0,0 +1,3 @@ +fn main() { + assert!(42 % 10 == 2); +} \ No newline at end of file diff --git a/tests/integration/programs/modulo.smir.json.expected b/tests/integration/programs/modulo.smir.json.expected new file mode 100644 index 0000000..145f9b9 --- /dev/null +++ b/tests/integration/programs/modulo.smir.json.expected @@ -0,0 +1,1940 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 52, + 50, + 32, + 37, + 32, + 49, + 48, + 32, + 61, + 61, + 32, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 2, + "projection": [] + } + }, + "expected": false, + "msg": { + "RemainderByZero": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 48 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 255, + 255, + 255, + 255 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 48 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 48 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "BinaryOp": [ + "BitAnd", + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 5, + "projection": [] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Rem", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + } + ] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 48 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "BinaryOp": [ + "Rem", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + } + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 2, + 3 + ] + ], + "otherwise": 4 + } + } + }, + "span": 50 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 51 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 25 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 6, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 52, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 52 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 53, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 27 + } + ], + "span": 54, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN6modulo4main17h" + } + ] +} diff --git a/tests/integration/programs/mutual_recursion.rs b/tests/integration/programs/mutual_recursion.rs new file mode 100644 index 0000000..7037bc8 --- /dev/null +++ b/tests/integration/programs/mutual_recursion.rs @@ -0,0 +1,21 @@ +fn is_even(n:u32) -> bool { + if n == 0 { + true + } else { + is_odd(n - 1) + } +} + +fn is_odd(n:u32) -> bool { + if n == 0 { + false + } else { + is_even(n - 1) + } +} + +fn main() { + let ans = is_even(10); + + assert!(ans == true); +} \ No newline at end of file diff --git a/tests/integration/programs/mutual_recursion.smir.json.expected b/tests/integration/programs/mutual_recursion.smir.json.expected new file mode 100644 index 0000000..33812a9 --- /dev/null +++ b/tests/integration/programs/mutual_recursion.smir.json.expected @@ -0,0 +1,2202 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 110, + 115, + 32, + 61, + 61, + 32, + 116, + 114, + 117, + 101 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN16mutual_recursion6is_odd17h" + } + ], + [ + { + "NormalSym": "_ZN16mutual_recursion7is_even17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 70, + "user_ty": null + } + } + ], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 13, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 69, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 71 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 72 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 73 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 30 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 15, + "kind": "ZeroSized", + "ty": 29 + }, + "span": 74, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 74 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 75, + "ty": 1 + }, + { + "mutability": "Not", + "span": 76, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 74, + "ty": 31 + } + ], + "span": 77, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "ans", + "source_info": { + "scope": 1, + "span": 76 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 8, + "name": "main" + } + }, + "symbol_name": "_ZN16mutual_recursion4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 1 + ] + ], + "otherwise": 2 + } + } + }, + "span": 58 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 60, + "user_ty": null + } + } + } + ] + }, + "span": 60 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 4 + } + }, + "span": 59 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 61, + "user_ty": null + } + } + ] + } + ] + }, + "span": 62 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 3, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 61, + "user_ty": null + } + } + ] + }, + "target": 3, + "unwind": "Continue" + } + }, + "span": 62 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 3, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 62 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 13, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 63, + "user_ty": null + } + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 64 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 65 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 66, + "ty": 24 + }, + { + "mutability": "Not", + "span": 67, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 62, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 62, + "ty": 27 + } + ], + "span": 68, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "n", + "source_info": { + "scope": 0, + "span": 67 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": "is_odd" + } + }, + "symbol_name": "_ZN16mutual_recursion6is_odd17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 1 + ] + ], + "otherwise": 2 + } + } + }, + "span": 47 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 1 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 49, + "user_ty": null + } + } + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 4 + } + }, + "span": 48 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 50, + "user_ty": null + } + } + ] + } + ] + }, + "span": 51 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 3, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 50, + "user_ty": null + } + } + ] + }, + "target": 3, + "unwind": "Continue" + } + }, + "span": 51 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 3, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 51 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 52, + "user_ty": null + } + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 53 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 54 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 55, + "ty": 24 + }, + { + "mutability": "Not", + "span": 56, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 27 + } + ], + "span": 57, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "n", + "source_info": { + "scope": 0, + "span": 56 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "is_even" + } + }, + "symbol_name": "_ZN16mutual_recursion7is_even17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/option-construction.rs b/tests/integration/programs/option-construction.rs new file mode 100644 index 0000000..e2b9b98 --- /dev/null +++ b/tests/integration/programs/option-construction.rs @@ -0,0 +1,6 @@ +#![allow(unused)] +fn main() { + let a:Option = Some(42); + let b:Option = None; + let c:u32 = a.unwrap(); +} \ No newline at end of file diff --git a/tests/integration/programs/option-construction.smir.json.expected b/tests/integration/programs/option-construction.smir.json.expected new file mode 100644 index 0000000..7f7aa4a --- /dev/null +++ b/tests/integration/programs/option-construction.smir.json.expected @@ -0,0 +1,1733 @@ +{ + "allocs": [], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core6option13unwrap_failed17h" + } + ], + [ + { + "NormalSym": "_ZN4core6option15Option$LT$T$GT$6unwrap17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 8, + 1, + [ + { + "Type": 25 + } + ], + null, + null + ] + }, + [ + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 59, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 60 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 8, + 0, + [ + { + "Type": 25 + } + ], + null, + null + ] + }, + [] + ] + } + ] + }, + "span": 61 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 57, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 58 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 62 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 63, + "ty": 1 + }, + { + "mutability": "Not", + "span": 64, + "ty": 26 + }, + { + "mutability": "Not", + "span": 65, + "ty": 26 + }, + { + "mutability": "Not", + "span": 66, + "ty": 25 + } + ], + "span": 67, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 64 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 65 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "c", + "source_info": { + "scope": 3, + "span": 66 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": "main" + } + }, + "symbol_name": "_ZN19option_construction4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Discriminant": { + "local": 1, + "projection": [] + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ], + [ + 1, + 3 + ] + ], + "otherwise": 1 + } + } + }, + "span": 42 + } + }, + { + "statements": [], + "terminator": { + "kind": "Unreachable", + "span": 43 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 44, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 45 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 1, + "projection": [ + { + "Downcast": 1 + }, + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 47 + } + ], + "terminator": { + "kind": "Return", + "span": 46 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 48, + "ty": 25 + }, + { + "mutability": "Not", + "span": 49, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 50, + "ty": 6 + }, + { + "mutability": "Mut", + "span": 45, + "ty": 27 + } + ], + "span": 51, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 49 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "val", + "source_info": { + "scope": 1, + "span": 47 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 5, + "name": "std::option::Option::::unwrap" + } + }, + "symbol_name": "_ZN4core6option15Option$LT$T$GT$6unwrap17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 53, + "user_ty": null + } + } + } + ] + }, + "span": 53 + } + ], + "terminator": { + "kind": "Return", + "span": 52 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 54, + "ty": 17 + }, + { + "mutability": "Not", + "span": 55, + "ty": 1 + } + ], + "span": 56, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 6, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/primitive-type-bounds.rs b/tests/integration/programs/primitive-type-bounds.rs new file mode 100644 index 0000000..036fb2f --- /dev/null +++ b/tests/integration/programs/primitive-type-bounds.rs @@ -0,0 +1,5 @@ +fn main () { + let a:u32 = 4294967295; + let b:u32 = 4294967294 + 1; + assert!(a == b) +} \ No newline at end of file diff --git a/tests/integration/programs/primitive-type-bounds.smir.json.expected b/tests/integration/programs/primitive-type-bounds.smir.json.expected new file mode 100644 index 0000000..86bf1a4 --- /dev/null +++ b/tests/integration/programs/primitive-type-bounds.smir.json.expected @@ -0,0 +1,1805 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 32, + 61, + 61, + 32, + 98 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 254, + 255, + 255, + 255 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 2, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 254, + 255, + 255, + 255 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 48, + "user_ty": null + } + } + ] + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 49 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 255, + 255, + 255, + 255 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 51, + "user_ty": null + } + } + } + ] + }, + "span": 52 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 4, + "projection": [] + } + }, + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 50 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 3, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 50 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 53 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 54, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 54 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 55, + "ty": 1 + }, + { + "mutability": "Not", + "span": 56, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 50, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 29 + } + ], + "span": 58, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 57 + }, + "value": { + "Const": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 255, + 255, + 255, + 255 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 51, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 56 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN21primitive_type_bounds4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/recursion-simple-match.rs b/tests/integration/programs/recursion-simple-match.rs new file mode 100644 index 0000000..96b4086 --- /dev/null +++ b/tests/integration/programs/recursion-simple-match.rs @@ -0,0 +1,12 @@ +fn sum_to_n_rec(n:u32) -> u32 { + match n { + 0 => 0, + _ => n + sum_to_n_rec(n - 1), + } +} + +fn main() { + let ans = sum_to_n_rec(10); + + assert!(ans == 55); +} \ No newline at end of file diff --git a/tests/integration/programs/recursion-simple-match.smir.json.expected b/tests/integration/programs/recursion-simple-match.smir.json.expected new file mode 100644 index 0000000..d6f6751 --- /dev/null +++ b/tests/integration/programs/recursion-simple-match.smir.json.expected @@ -0,0 +1,2009 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 110, + 115, + 32, + 61, + 61, + 32, + 53, + 53 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN22recursion_simple_match12sum_to_n_rec17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 1 + } + } + }, + "span": 47 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 48, + "user_ty": null + } + } + ] + }, + "target": 3, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 50, + "user_ty": null + } + } + } + ] + }, + "span": 50 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 6 + } + }, + "span": 50 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 51, + "user_ty": null + } + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 52 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 5, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 5, + "unwind": "Continue" + } + }, + "span": 53 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 5, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 6 + } + }, + "span": 54 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 55 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 56, + "ty": 25 + }, + { + "mutability": "Not", + "span": 57, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 27 + } + ], + "span": 58, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "n", + "source_info": { + "scope": 0, + "span": 57 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "sum_to_n_rec" + } + }, + "symbol_name": "_ZN22recursion_simple_match12sum_to_n_rec17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 60, + "user_ty": null + } + } + ], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 59, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 61 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 55, + 2 + ] + ], + "otherwise": 3 + } + } + }, + "span": 62 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 63 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 29 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 13, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 64, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 64 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 65, + "ty": 1 + }, + { + "mutability": "Not", + "span": 66, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 64, + "ty": 30 + } + ], + "span": 67, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "ans", + "source_info": { + "scope": 1, + "span": 66 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": "main" + } + }, + "symbol_name": "_ZN22recursion_simple_match4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/recursion-simple.rs b/tests/integration/programs/recursion-simple.rs new file mode 100644 index 0000000..e15793f --- /dev/null +++ b/tests/integration/programs/recursion-simple.rs @@ -0,0 +1,13 @@ +fn sum_to_n_rec(n:u32) -> u32 { + if n == 0 { + 0 + } else { + n + sum_to_n_rec(n - 1) + } +} + +fn main() { + let ans = sum_to_n_rec(10); + + assert!(ans == 55); +} \ No newline at end of file diff --git a/tests/integration/programs/recursion-simple.smir.json.expected b/tests/integration/programs/recursion-simple.smir.json.expected new file mode 100644 index 0000000..ebc6d5f --- /dev/null +++ b/tests/integration/programs/recursion-simple.smir.json.expected @@ -0,0 +1,2009 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 97, + 110, + 115, + 32, + 61, + 61, + 32, + 53, + 53 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN16recursion_simple12sum_to_n_rec17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 1 + ] + ], + "otherwise": 2 + } + } + }, + "span": 47 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 49, + "user_ty": null + } + } + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 6 + } + }, + "span": 48 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 50, + "user_ty": null + } + } + ] + } + ] + }, + "span": 51 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 1, + 25 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 50, + "user_ty": null + } + } + ] + }, + "target": 3, + "unwind": "Continue" + } + }, + "span": 51 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 4, + "projection": [ + { + "Field": [ + 0, + 24 + ] + } + ] + } + } + } + ] + }, + "span": 51 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 52, + "user_ty": null + } + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 53 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 54 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 5, + "projection": [ + { + "Field": [ + 1, + 25 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ] + }, + "target": 5, + "unwind": "Continue" + } + }, + "span": 54 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 5, + "projection": [ + { + "Field": [ + 0, + 24 + ] + } + ] + } + } + } + ] + }, + "span": 54 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 6 + } + }, + "span": 48 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 55 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 56, + "ty": 24 + }, + { + "mutability": "Not", + "span": 57, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 27 + } + ], + "span": 58, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "n", + "source_info": { + "scope": 0, + "span": 57 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "sum_to_n_rec" + } + }, + "symbol_name": "_ZN16recursion_simple12sum_to_n_rec17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 10, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 60, + "user_ty": null + } + } + ], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 59, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 61 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 55, + 2 + ] + ], + "otherwise": 3 + } + } + }, + "span": 62 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 63 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 29 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 13, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 64, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 64 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 65, + "ty": 1 + }, + { + "mutability": "Not", + "span": 66, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 64, + "ty": 30 + } + ], + "span": 67, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "ans", + "source_info": { + "scope": 1, + "span": 66 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": "main" + } + }, + "symbol_name": "_ZN16recursion_simple4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/ref-deref.rs b/tests/integration/programs/ref-deref.rs new file mode 100644 index 0000000..d637a6c --- /dev/null +++ b/tests/integration/programs/ref-deref.rs @@ -0,0 +1,7 @@ +fn main() { + let a = 42; + let b = &a; + let c = *b; + + assert!(c == 42); +} \ No newline at end of file diff --git a/tests/integration/programs/ref-deref.smir.json.expected b/tests/integration/programs/ref-deref.smir.json.expected new file mode 100644 index 0000000..65d04b7 --- /dev/null +++ b/tests/integration/programs/ref-deref.smir.json.expected @@ -0,0 +1,1639 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 99, + 32, + 61, + 61, + 32, + 52, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + } + ] + }, + "span": 48 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 49 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 50 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 3, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 42, + 1 + ] + ], + "otherwise": 2 + } + } + }, + "span": 47 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 51 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 25 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 4, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 52, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 52 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 53, + "ty": 1 + }, + { + "mutability": "Not", + "span": 54, + "ty": 16 + }, + { + "mutability": "Not", + "span": 55, + "ty": 26 + }, + { + "mutability": "Not", + "span": 56, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 27 + } + ], + "span": 57, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 54 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 55 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "c", + "source_info": { + "scope": 3, + "span": 56 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN9ref_deref4main17h" + } + ] +} diff --git a/tests/integration/programs/shl_min.rs b/tests/integration/programs/shl_min.rs new file mode 100644 index 0000000..d33c271 --- /dev/null +++ b/tests/integration/programs/shl_min.rs @@ -0,0 +1,7 @@ +fn main() { + assert!(-128_i8 << 1 == 0); + assert!(-32768_i16 << 1 == 0); + assert!(-2147483648_i32 << 1 == 0); + assert!(-9223372036854775808_i64 << 1 == 0); + assert!(-170141183460469231731687303715884105728_i128 << 1 == 0); +} \ No newline at end of file diff --git a/tests/integration/programs/shl_min.smir.json.expected b/tests/integration/programs/shl_min.smir.json.expected new file mode 100644 index 0000000..e8d84cc --- /dev/null +++ b/tests/integration/programs/shl_min.smir.json.expected @@ -0,0 +1,3419 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 45, + 49, + 50, + 56, + 95, + 105, + 56, + 32, + 60, + 60, + 32, + 49, + 32, + 61, + 61, + 32, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 45, + 51, + 50, + 55, + 54, + 56, + 95, + 105, + 49, + 54, + 32, + 60, + 60, + 32, + 49, + 32, + 61, + 61, + 32, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 45, + 50, + 49, + 52, + 55, + 52, + 56, + 51, + 54, + 52, + 56, + 95, + 105, + 51, + 50, + 32, + 60, + 60, + 32, + 49, + 32, + 61, + 61, + 32, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 45, + 57, + 50, + 50, + 51, + 51, + 55, + 50, + 48, + 51, + 54, + 56, + 53, + 52, + 55, + 55, + 53, + 56, + 48, + 56, + 95, + 105, + 54, + 52, + 32, + 60, + 60, + 32, + 49, + 32, + 61, + 61, + 32, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 45, + 49, + 55, + 48, + 49, + 52, + 49, + 49, + 56, + 51, + 52, + 54, + 48, + 52, + 54, + 57, + 50, + 51, + 49, + 55, + 51, + 49, + 54, + 56, + 55, + 51, + 48, + 51, + 55, + 49, + 53, + 56, + 56, + 52, + 49, + 48, + 53, + 55, + 50, + 56, + 95, + 105, + 49, + 50, + 56, + 32, + 60, + 60, + 32, + 49, + 32, + 61, + 61, + 32, + 48 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + }, + 24 + ] + } + ] + }, + "span": 49 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 8, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 49, + "user_ty": null + } + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 3, + "projection": [] + } + }, + "expected": true, + "msg": { + "Overflow": [ + "Shl", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 2 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "BinaryOp": [ + "Shl", + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 2 + }, + "span": 47, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 3 + } + } + }, + "span": 50 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 52, + "user_ty": null + } + }, + 24 + ] + } + ] + }, + "span": 53 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 16, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 53, + "user_ty": null + } + } + ] + } + ] + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 7, + "projection": [] + } + }, + "expected": true, + "msg": { + "Overflow": [ + "Shl", + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 2, + "bytes": [ + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 51, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 52, + "user_ty": null + } + } + ] + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 53 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 4, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 54, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 54 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "BinaryOp": [ + "Shl", + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 2, + "bytes": [ + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 51, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 52, + "user_ty": null + } + } + ] + } + ] + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 5, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 5 + ] + ], + "otherwise": 6 + } + } + }, + "span": 55 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 57, + "user_ty": null + } + }, + 24 + ] + } + ] + }, + "span": 58 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Move": { + "local": 10, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 17, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 32, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 58, + "user_ty": null + } + } + ] + } + ] + }, + "span": 58 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 11, + "projection": [] + } + }, + "expected": true, + "msg": { + "Overflow": [ + "Shl", + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 56, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 57, + "user_ty": null + } + } + ] + }, + "target": 7, + "unwind": "Continue" + } + }, + "span": 58 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 18, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 38, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 8, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 59, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 59 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "BinaryOp": [ + "Shl", + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 56, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 57, + "user_ty": null + } + } + ] + } + ] + }, + "span": 58 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 9, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 8 + ] + ], + "otherwise": 9 + } + } + }, + "span": 60 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 62, + "user_ty": null + } + }, + 24 + ] + } + ] + }, + "span": 63 + }, + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Move": { + "local": 14, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 20, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 64, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 63, + "user_ty": null + } + } + ] + } + ] + }, + "span": 63 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 15, + "projection": [] + } + }, + "expected": true, + "msg": { + "Overflow": [ + "Shl", + { + "Constant": { + "const_": { + "id": 19, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 28 + }, + "span": 61, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 62, + "user_ty": null + } + } + ] + }, + "target": 10, + "unwind": "Continue" + } + }, + "span": 63 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 21, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 2 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 12, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 64, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 64 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "BinaryOp": [ + "Shl", + { + "Constant": { + "const_": { + "id": 19, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 28 + }, + "span": 61, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 62, + "user_ty": null + } + } + ] + } + ] + }, + "span": 63 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 13, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 11 + ] + ], + "otherwise": 12 + } + } + }, + "span": 65 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 18, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 67, + "user_ty": null + } + }, + 24 + ] + } + ] + }, + "span": 68 + }, + { + "kind": { + "Assign": [ + { + "local": 19, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Move": { + "local": 18, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 128, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 68, + "user_ty": null + } + } + ] + } + ] + }, + "span": 68 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 19, + "projection": [] + } + }, + "expected": true, + "msg": { + "Overflow": [ + "Shl", + { + "Constant": { + "const_": { + "id": 22, + "kind": { + "Allocated": { + "align": 16, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 66, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 67, + "user_ty": null + } + } + ] + }, + "target": 13, + "unwind": "Continue" + } + }, + "span": 68 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 24, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 52, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 3 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 16, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 69, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 69 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 17, + "projection": [] + }, + { + "BinaryOp": [ + "Shl", + { + "Constant": { + "const_": { + "id": 22, + "kind": { + "Allocated": { + "align": 16, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 29 + }, + "span": 66, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 67, + "user_ty": null + } + } + ] + } + ] + }, + "span": 68 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 17, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 14 + ] + ], + "otherwise": 15 + } + } + }, + "span": 70 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 71 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 25, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 73, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 4 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 20, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 72, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 72 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 73, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 2 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 49, + "ty": 30 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 31 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 30 + }, + { + "mutability": "Mut", + "span": 59, + "ty": 31 + }, + { + "mutability": "Mut", + "span": 58, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 58, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 58, + "ty": 30 + }, + { + "mutability": "Mut", + "span": 64, + "ty": 31 + }, + { + "mutability": "Mut", + "span": 63, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 63, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 63, + "ty": 30 + }, + { + "mutability": "Mut", + "span": 69, + "ty": 31 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 68, + "ty": 30 + }, + { + "mutability": "Mut", + "span": 72, + "ty": 31 + } + ], + "span": 74, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN7shl_min4main17h" + } + ] +} diff --git a/tests/integration/programs/slice.rs b/tests/integration/programs/slice.rs new file mode 100644 index 0000000..bff6e82 --- /dev/null +++ b/tests/integration/programs/slice.rs @@ -0,0 +1,7 @@ +fn main() { + let a = [1, 2, 3, 4]; + + let b = &a[1..3]; + + assert!(b == [2, 3]); +} \ No newline at end of file diff --git a/tests/integration/programs/slice.smir.json.expected b/tests/integration/programs/slice.smir.json.expected new file mode 100644 index 0000000..6f1b9bf --- /dev/null +++ b/tests/integration/programs/slice.smir.json.expected @@ -0,0 +1,4509 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0, + 3, + 0, + 0, + 0 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 98, + 32, + 61, + 61, + 32, + 91, + 50, + 44, + 32, + 51, + 93 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN4core5slice5index24slice_end_index_len_fail17h" + } + ], + [ + { + "NormalSym": "_ZN4core5slice5index22slice_index_order_fail17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN69_$LT$T$u20$as$u20$core..array..equality..SpecArrayEq$LT$U$C$_$GT$$GT$7spec_eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core5array8equality92_$LT$impl$u20$core..cmp..PartialEq$LT$$u5b$U$u3b$$u20$N$u5d$$GT$$u20$for$u20$$u5b$T$u5d$$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h" + } + ], + [ + { + "IntrinsicSym": "raw_eq" + } + ], + [ + { + "NormalSym": "_ZN4core5array85_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$5index17h" + } + ], + [ + { + "NormalSym": "_ZN4core5array8equality96_$LT$impl$u20$core..cmp..PartialEq$LT$$u5b$U$u3b$$u20$N$u5d$$GT$$u20$for$u20$$RF$$u5b$T$u5d$$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 1, + 0 + ] + } + ] + } + } + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 0, + 0 + ] + } + ] + } + } + } + ] + }, + "span": 3 + }, + { + "kind": { + "StorageLive": 13 + }, + "span": 0 + }, + { + "kind": { + "Assign": [ + { + "local": 13, + "projection": [] + }, + { + "BinaryOp": [ + "Lt", + { + "Copy": { + "local": 6, + "projection": [] + } + }, + { + "Copy": { + "local": 7, + "projection": [] + } + } + ] + } + ] + }, + "span": 0 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 13, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 4 + ] + ], + "otherwise": 3 + } + } + }, + "span": 0 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 9, + "projection": [] + } + } + ], + "destination": { + "local": 10, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 4, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 5 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 8 + }, + { + "kind": { + "StorageLive": 12 + }, + "span": 9 + }, + { + "kind": { + "Assign": [ + { + "local": 12, + "projection": [] + }, + { + "AddressOf": [ + "Not", + { + "local": 2, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 9 + }, + { + "kind": { + "StorageLive": 15 + }, + "span": 8 + }, + { + "kind": { + "StorageLive": 16 + }, + "span": 10 + }, + { + "kind": { + "Assign": [ + { + "local": 16, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 12, + "projection": [] + } + }, + 2 + ] + } + ] + }, + "span": 11 + }, + { + "kind": { + "Assign": [ + { + "local": 15, + "projection": [] + }, + { + "BinaryOp": [ + "Offset", + { + "Copy": { + "local": 16, + "projection": [] + } + }, + { + "Copy": { + "local": 7, + "projection": [] + } + } + ] + } + ] + }, + "span": 12 + }, + { + "kind": { + "StorageDead": 16 + }, + "span": 10 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Aggregate": [ + { + "RawPtr": [ + 3, + "Not" + ] + }, + [ + { + "Copy": { + "local": 15, + "projection": [] + } + }, + { + "Copy": { + "local": 4, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 13 + }, + { + "kind": { + "StorageDead": 15 + }, + "span": 8 + }, + { + "kind": { + "StorageDead": 12 + }, + "span": 14 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 11, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 15 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 16 + } + ], + "terminator": { + "kind": "Return", + "span": 6 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 13 + }, + "span": 19 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 20 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 7, + "projection": [] + } + }, + { + "Move": { + "local": 6, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 4 + }, + "span": 17, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 18 + } + }, + { + "statements": [ + { + "kind": { + "StorageLive": 14 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 14, + "projection": [] + }, + { + "BinaryOp": [ + "SubUnchecked", + { + "Copy": { + "local": 6, + "projection": [] + } + }, + { + "Copy": { + "local": 7, + "projection": [] + } + } + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 1, + 1, + [ + { + "Type": 0 + } + ], + null, + null + ] + }, + [ + { + "Move": { + "local": 14, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 14 + }, + "span": 25 + }, + { + "kind": { + "StorageDead": 13 + }, + "span": 19 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 1 + }, + { + "Field": [ + 0, + 0 + ] + } + ] + } + } + } + ] + }, + "span": 26 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 20 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 21 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "UnaryOp": [ + "PtrMetadata", + { + "Copy": { + "local": 2, + "projection": [] + } + } + ] + } + ] + }, + "span": 27 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "BinaryOp": [ + "Gt", + { + "Copy": { + "local": 6, + "projection": [] + } + }, + { + "Copy": { + "local": 9, + "projection": [] + } + } + ] + } + ] + }, + "span": 21 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 8, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 1 + } + } + }, + "span": 21 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 28, + "ty": 5 + }, + { + "mutability": "Not", + "span": 29, + "ty": 6 + }, + { + "mutability": "Not", + "span": 30, + "ty": 5 + }, + { + "mutability": "Mut", + "span": 31, + "ty": 7 + }, + { + "mutability": "Not", + "span": 26, + "ty": 0 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 8 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 0 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 0 + }, + { + "mutability": "Mut", + "span": 21, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 27, + "ty": 0 + }, + { + "mutability": "Not", + "span": 5, + "ty": 7 + }, + { + "mutability": "Not", + "span": 8, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 9, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 0, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 0 + }, + { + "mutability": "Not", + "span": 32, + "ty": 2 + }, + { + "mutability": "Not", + "span": 33, + "ty": 2 + } + ], + "span": 40, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 29 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "slice", + "source_info": { + "scope": 0, + "span": 30 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "new_len", + "source_info": { + "scope": 1, + "span": 26 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 2, + "span": 34 + }, + "value": { + "Place": { + "local": 6, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "rhs", + "source_info": { + "scope": 2, + "span": 35 + }, + "value": { + "Place": { + "local": 7, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 3, + "span": 36 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "offset", + "source_info": { + "scope": 3, + "span": 37 + }, + "value": { + "Place": { + "local": 7, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "len", + "source_info": { + "scope": 3, + "span": 38 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 5, + "span": 39 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": " as std::slice::SliceIndex<[i32]>>::index" + } + }, + "symbol_name": "_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 42 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 43 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 44 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 3, + [ + { + "Type": 12 + }, + { + "Type": 13 + }, + { + "Type": 14 + }, + { + "Type": 15 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 44 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 43 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 11 + }, + "span": 41, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 42 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 46 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 17 + ] + } + ] + } + } + } + ] + }, + "span": 47 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 48 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 48 + } + ], + "terminator": { + "kind": "Return", + "span": 45 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 17 + }, + { + "mutability": "Not", + "span": 50, + "ty": 18 + }, + { + "mutability": "Not", + "span": 51, + "ty": 17 + }, + { + "mutability": "Not", + "span": 52, + "ty": 19 + }, + { + "mutability": "Not", + "span": 53, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 42, + "ty": 21 + }, + { + "mutability": "Mut", + "span": 43, + "ty": 16 + }, + { + "mutability": "Not", + "span": 43, + "ty": 22 + }, + { + "mutability": "Not", + "span": 44, + "ty": 23 + } + ], + "span": 54, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 50 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 51 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 52 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 53 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 47 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 2, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 57 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 56 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 58 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 18 + ] + } + ] + } + } + } + ] + }, + "span": 58 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 55, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 56 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 60 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 25 + }, + "span": 59, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 57 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 62 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 63 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 26 + ] + }, + { + "Field": [ + 0, + 20 + ] + } + ] + } + } + } + ] + }, + "span": 63 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 27 + ] + } + ] + }, + "span": 64 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 65 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 66 + } + ], + "terminator": { + "kind": "Return", + "span": 61 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 67, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 44, + "ty": 22 + }, + { + "mutability": "Mut", + "span": 57, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 56, + "ty": 12 + }, + { + "mutability": "Mut", + "span": 58, + "ty": 18 + }, + { + "mutability": "Mut", + "span": 63, + "ty": 20 + } + ], + "span": 44, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 50 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 18 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 68 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 3, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 12 + }, + "span": 70, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 29 + }, + "span": 69, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 71 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 12 + }, + "span": 70, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 30 + }, + "span": 72, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 73 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 74 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 75, + "ty": 12 + }, + { + "mutability": "Not", + "span": 76, + "ty": 18 + }, + { + "mutability": "Not", + "span": 77, + "ty": 12 + } + ], + "span": 80, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 76 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 78 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 79 + }, + "value": { + "Const": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 12 + }, + "span": 70, + "user_ty": null + } + } + } + ] + } + ], + "id": 4, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 31 + }, + "span": 81, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 81 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 81 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 81, + "ty": 27 + }, + { + "mutability": "Not", + "span": 81, + "ty": 32 + }, + { + "mutability": "Not", + "span": 81, + "ty": 12 + } + ], + "span": 81, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 81 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 81 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 81, + "ty": 12 + }, + { + "mutability": "Not", + "span": 81, + "ty": 18 + }, + { + "mutability": "Not", + "span": 81, + "ty": 12 + } + ], + "span": 81, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 5, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 81 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 9, + "kind": "ZeroSized", + "ty": 33 + }, + "span": 81, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 81 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 81 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 81 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 81 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 81 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 81, + "ty": 27 + }, + { + "mutability": "Not", + "span": 81, + "ty": 23 + }, + { + "mutability": "Not", + "span": 81, + "ty": 12 + }, + { + "mutability": "Not", + "span": 81, + "ty": 34 + } + ], + "span": 81, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 82 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 82, + "ty": 12 + }, + { + "mutability": "Not", + "span": 82, + "ty": 32 + } + ], + "span": 82, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 6, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 1, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 85 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 35 + }, + "span": 83, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 84 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 86 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 87, + "ty": 5 + }, + { + "mutability": "Not", + "span": 88, + "ty": 36 + }, + { + "mutability": "Not", + "span": 89, + "ty": 6 + }, + { + "mutability": "Not", + "span": 85, + "ty": 5 + } + ], + "span": 90, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 88 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 89 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": "std::array::> for [i32; 4]>::index" + } + }, + "symbol_name": "_ZN4core5array85_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u3b$$u20$N$u5d$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 92 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 93 + }, + { + "kind": { + "StorageLive": 9 + }, + "span": 94 + }, + { + "kind": { + "StorageLive": 10 + }, + "span": 94 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 91 + }, + { + "kind": { + "StorageLive": 7 + }, + "span": 95 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "UnaryOp": [ + "PtrMetadata", + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + } + ] + }, + "span": 95 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 7, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 0 + }, + "span": 96, + "user_ty": null + } + } + ] + } + ] + }, + "span": 91 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 6, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 91 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 98 + } + ], + "terminator": { + "kind": "Return", + "span": 97 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 7 + }, + "span": 96 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 101 + }, + { + "kind": { + "Assign": [ + { + "local": 10, + "projection": [] + }, + { + "AddressOf": [ + "Not", + { + "local": 1, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 102 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Cast": [ + "PtrToPtr", + { + "Copy": { + "local": 10, + "projection": [] + } + }, + 38 + ] + } + ] + }, + "span": 103 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [ + "Deref" + ] + } + ] + } + ] + }, + "span": 104 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 1, + 1, + [ + { + "Type": 39 + } + ], + null, + null + ] + }, + [ + { + "Copy": { + "local": 9, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 105 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 106 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 107 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 94 + }, + { + "kind": { + "StorageDead": 9 + }, + "span": 94 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 108 + }, + { + "kind": { + "Assign": [ + { + "local": 11, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 5, + "projection": [ + { + "Downcast": 1 + }, + { + "Field": [ + 0, + 39 + ] + } + ] + } + } + } + ] + }, + "span": 109 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 9, + 0, + [ + { + "Type": 39 + }, + { + "Type": 40 + } + ], + null, + null + ] + }, + [ + { + "Copy": { + "local": 11, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 110 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 108 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 111 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 3, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 39 + ] + } + ] + } + } + } + ] + }, + "span": 112 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 12, + "kind": "ZeroSized", + "ty": 37 + }, + "span": 99, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 100 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 7 + }, + "span": 96 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 41 + }, + "span": 70, + "user_ty": null + } + } + } + ] + }, + "span": 114 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 107 + }, + { + "kind": { + "StorageDead": 10 + }, + "span": 94 + }, + { + "kind": { + "StorageDead": 9 + }, + "span": 94 + }, + { + "kind": { + "StorageLive": 11 + }, + "span": 108 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 42 + }, + "span": 70, + "user_ty": null + } + } + } + ] + }, + "span": 115 + }, + { + "kind": { + "StorageDead": 11 + }, + "span": 108 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 111 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 9 + }, + "span": 113, + "user_ty": null + } + } + } + ] + }, + "span": 113 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 1 + } + }, + "span": 113 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 116, + "ty": 9 + }, + { + "mutability": "Not", + "span": 117, + "ty": 5 + }, + { + "mutability": "Not", + "span": 118, + "ty": 39 + }, + { + "mutability": "Not", + "span": 92, + "ty": 42 + }, + { + "mutability": "Not", + "span": 112, + "ty": 39 + }, + { + "mutability": "Mut", + "span": 93, + "ty": 41 + }, + { + "mutability": "Mut", + "span": 91, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 95, + "ty": 0 + }, + { + "mutability": "Not", + "span": 101, + "ty": 38 + }, + { + "mutability": "Not", + "span": 119, + "ty": 39 + }, + { + "mutability": "Mut", + "span": 120, + "ty": 10 + }, + { + "mutability": "Not", + "span": 109, + "ty": 39 + } + ], + "span": 129, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 117 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 118 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 1, + "span": 92 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 112 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 3, + "span": 121 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "slice", + "source_info": { + "scope": 4, + "span": 122 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 5, + "span": 123 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "ptr", + "source_info": { + "scope": 6, + "span": 101 + }, + "value": { + "Place": { + "local": 8, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "me", + "source_info": { + "scope": 7, + "span": 119 + }, + "value": { + "Place": { + "local": 8, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 8, + "span": 124 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 9, + "span": 125 + }, + "value": { + "Place": { + "local": 5, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "err", + "source_info": { + "scope": 9, + "span": 126 + }, + "value": { + "Const": { + "const_": { + "id": 16, + "kind": "ZeroSized", + "ty": 40 + }, + "span": 70, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 10, + "span": 109 + }, + "value": { + "Place": { + "local": 11, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 11, + "span": 127 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 11, + "span": 128 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 8, + "name": "std::array::equality:: for [i32]>::eq" + } + }, + "symbol_name": "_ZN4core5array8equality92_$LT$impl$u20$core..cmp..PartialEq$LT$$u5b$U$u3b$$u20$N$u5d$$GT$$u20$for$u20$$u5b$T$u5d$$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 131 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 17, + "kind": "ZeroSized", + "ty": 43 + }, + "span": 130, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 130 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 132 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 133, + "ty": 9 + }, + { + "mutability": "Not", + "span": 134, + "ty": 44 + }, + { + "mutability": "Not", + "span": 135, + "ty": 39 + }, + { + "mutability": "Mut", + "span": 134, + "ty": 5 + } + ], + "span": 136, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 134 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 135 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 10, + "name": "std::array::equality:: for &[i32]>::eq" + } + }, + "symbol_name": "_ZN4core5array8equality96_$LT$impl$u20$core..cmp..PartialEq$LT$$u5b$U$u3b$$u20$N$u5d$$GT$$u20$for$u20$$RF$$u5b$T$u5d$$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 1, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 18, + "kind": "ZeroSized", + "ty": 45 + }, + "span": 137, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 138 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 139 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 140, + "ty": 5 + }, + { + "mutability": "Not", + "span": 141, + "ty": 5 + }, + { + "mutability": "Not", + "span": 142, + "ty": 6 + } + ], + "span": 143, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 141 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "index", + "source_info": { + "scope": 0, + "span": 142 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 11, + "name": "core::slice::index::> for [i32]>::index" + } + }, + "symbol_name": "_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 19, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 28 + }, + "span": 145, + "user_ty": null + } + } + } + ] + }, + "span": 145 + } + ], + "terminator": { + "kind": "Return", + "span": 144 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 146, + "ty": 28 + }, + { + "mutability": "Not", + "span": 147, + "ty": 12 + } + ], + "span": 148, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 12, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Array": 27 + }, + [ + { + "Constant": { + "const_": { + "id": 22, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 159, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 160, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 24, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 161, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 25, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 4, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 162, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 163 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 164 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 15, + 0, + [ + { + "Type": 0 + } + ], + null, + null + ] + }, + [ + { + "Constant": { + "const_": { + "id": 26, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 0 + }, + "span": 165, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 27, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 0 + }, + "span": 166, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 167 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + }, + { + "Move": { + "local": 5, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 21, + "kind": "ZeroSized", + "ty": 47 + }, + "span": 158, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 158 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 3, + "projection": [] + } + } + } + ] + }, + "span": 169 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [] + } + ] + } + ] + }, + "span": 170 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 29, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 39 + }, + "span": 171, + "user_ty": null + } + } + } + ] + }, + "span": 171 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 7, + "projection": [] + } + }, + { + "Move": { + "local": 8, + "projection": [] + } + } + ], + "destination": { + "local": 6, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 28, + "kind": "ZeroSized", + "ty": 48 + }, + "span": 168, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 168 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 6, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 4 + ] + ], + "otherwise": 3 + } + } + }, + "span": 168 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 172 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 31, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 50 + }, + "span": 70, + "user_ty": null + } + } + ], + "destination": { + "local": 9, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 30, + "kind": "ZeroSized", + "ty": 49 + }, + "span": 173, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 173 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 174, + "ty": 12 + }, + { + "mutability": "Not", + "span": 175, + "ty": 51 + }, + { + "mutability": "Not", + "span": 176, + "ty": 5 + }, + { + "mutability": "Not", + "span": 158, + "ty": 5 + }, + { + "mutability": "Mut", + "span": 164, + "ty": 36 + }, + { + "mutability": "Mut", + "span": 167, + "ty": 6 + }, + { + "mutability": "Mut", + "span": 168, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 170, + "ty": 44 + }, + { + "mutability": "Mut", + "span": 171, + "ty": 39 + }, + { + "mutability": "Mut", + "span": 173, + "ty": 7 + } + ], + "span": 177, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 175 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 176 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + }, + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Array": 27 + }, + [ + { + "Constant": { + "const_": { + "id": 23, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 178, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 24, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 3, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 27 + }, + "span": 179, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 171 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 171 + } + ], + "terminator": { + "kind": "Return", + "span": 171 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 171, + "ty": 39 + }, + { + "mutability": "Mut", + "span": 171, + "ty": 52 + } + ], + "span": 171, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 14, + "name": "main" + } + }, + "symbol_name": "_ZN5slice4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 151 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Cast": [ + "Transmute", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + 39 + ] + } + ] + }, + "span": 151 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 20, + "kind": "ZeroSized", + "ty": 46 + }, + "span": 149, + "user_ty": null + } + }, + "target": 1, + "unwind": "Unreachable" + } + }, + "span": 150 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 153 + } + ], + "terminator": { + "kind": "Return", + "span": 152 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 154, + "ty": 9 + }, + { + "mutability": "Not", + "span": 155, + "ty": 39 + }, + { + "mutability": "Not", + "span": 156, + "ty": 39 + }, + { + "mutability": "Mut", + "span": 151, + "ty": 39 + } + ], + "span": 157, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "a", + "source_info": { + "scope": 0, + "span": 155 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "b", + "source_info": { + "scope": 0, + "span": 156 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 13, + "name": ">::spec_eq" + } + }, + "symbol_name": "_ZN69_$LT$T$u20$as$u20$core..array..equality..SpecArrayEq$LT$U$C$_$GT$$GT$7spec_eq17h" + } + ] +} diff --git a/tests/integration/programs/strange-ref-deref.rs b/tests/integration/programs/strange-ref-deref.rs new file mode 100644 index 0000000..13e71d7 --- /dev/null +++ b/tests/integration/programs/strange-ref-deref.rs @@ -0,0 +1,7 @@ +fn main() { + let a = 42; + let mut b = &a; + b = &b; + + assert!(*b == 42); +} \ No newline at end of file diff --git a/tests/integration/programs/strange-ref-deref.smir.json.expected b/tests/integration/programs/strange-ref-deref.smir.json.expected new file mode 100644 index 0000000..cb37763 --- /dev/null +++ b/tests/integration/programs/strange-ref-deref.smir.json.expected @@ -0,0 +1,1696 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 42, + 98, + 32, + 61, + 61, + 32, + 52, + 50 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + } + } + ] + }, + "span": 48 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 49 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [] + } + ] + } + ] + }, + "span": 50 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "CopyForDeref": { + "local": 3, + "projection": [ + "Deref" + ] + } + } + ] + }, + "span": 50 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 6, + "projection": [] + } + } + } + ] + }, + "span": 51 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 52 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 4, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 42, + 1 + ] + ], + "otherwise": 2 + } + } + }, + "span": 47 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 53 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 11, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 25 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 10, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 54, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 54 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 55, + "ty": 1 + }, + { + "mutability": "Not", + "span": 56, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 57, + "ty": 26 + }, + { + "mutability": "Not", + "span": 50, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 50, + "ty": 26 + } + ], + "span": 58, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "a", + "source_info": { + "scope": 1, + "span": 56 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "b", + "source_info": { + "scope": 2, + "span": 57 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN17strange_ref_deref4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +} diff --git a/tests/integration/programs/struct.rs b/tests/integration/programs/struct.rs new file mode 100644 index 0000000..c05abb5 --- /dev/null +++ b/tests/integration/programs/struct.rs @@ -0,0 +1,10 @@ + struct St { + a:u32, + b:u32, + } + + fn main() { + let s:St = St { a:1, b:2 }; + + assert!(s.a + 1 == s.b); + } \ No newline at end of file diff --git a/tests/integration/programs/struct.smir.json.expected b/tests/integration/programs/struct.smir.json.expected new file mode 100644 index 0000000..cf13294 --- /dev/null +++ b/tests/integration/programs/struct.smir.json.expected @@ -0,0 +1,1841 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 115, + 46, + 97, + 32, + 43, + 32, + 49, + 32, + 61, + 61, + 32, + 115, + 46, + 98 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + { + "Adt": [ + 7, + 0, + [], + null, + null + ] + }, + [ + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 49, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 2, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 50, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 51 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 52 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 4, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 47, + "user_ty": null + } + } + ] + } + ] + }, + "span": 48 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 5, + "projection": [ + { + "Field": [ + 1, + 24 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Move": { + "local": 4, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 1, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 25 + }, + "span": 47, + "user_ty": null + } + } + ] + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 48 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 5, + "projection": [ + { + "Field": [ + 0, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 48 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 1, + 25 + ] + } + ] + } + } + } + ] + }, + "span": 54 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 6, + "projection": [] + } + } + ] + } + ] + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 53 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 55 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 7, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 56, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 56 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 57, + "ty": 1 + }, + { + "mutability": "Not", + "span": 58, + "ty": 28 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 48, + "ty": 29 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 56, + "ty": 30 + } + ], + "span": 59, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "s", + "source_info": { + "scope": 1, + "span": 58 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN6struct4main17h" + } + ] +} diff --git a/tests/integration/programs/sum-to-n.rs b/tests/integration/programs/sum-to-n.rs new file mode 100644 index 0000000..5741aa3 --- /dev/null +++ b/tests/integration/programs/sum-to-n.rs @@ -0,0 +1,23 @@ +fn sum_to_n(n:usize) -> usize { + let mut sum = 0; + let mut counter = n; + + while counter > 0 { + sum += counter; + counter = counter - 1; + } + return sum; +} + +fn test_sum_to_n() -> () { + let n = 10; + let golden = 55; + let sucess = sum_to_n(n) == golden; + assert!(sucess); +} + + +fn main() { + test_sum_to_n(); + return (); +} diff --git a/tests/integration/programs/sum-to-n.smir.json.expected b/tests/integration/programs/sum-to-n.smir.json.expected new file mode 100644 index 0000000..5b34262 --- /dev/null +++ b/tests/integration/programs/sum-to-n.smir.json.expected @@ -0,0 +1,2438 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 115, + 117, + 99, + 101, + 115, + 115 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN8sum_to_n8sum_to_n17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NormalSym": "_ZN8sum_to_n13test_sum_to_n17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 68, + "user_ty": null + } + } + } + ] + }, + "span": 69 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 27 + }, + "span": 66, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 67 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 55, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 71, + "user_ty": null + } + } + } + ] + }, + "span": 72 + }, + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ] + } + ] + }, + "span": 73 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Copy": { + "local": 1, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 3 + } + } + }, + "span": 70 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 15, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 29 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 14, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 74, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 74 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 75 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 76, + "ty": 1 + }, + { + "mutability": "Not", + "span": 77, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 67, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 69, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 72, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 74, + "ty": 30 + } + ], + "span": 80, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "n", + "source_info": { + "scope": 1, + "span": 78 + }, + "value": { + "Const": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 68, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "golden", + "source_info": { + "scope": 2, + "span": 79 + }, + "value": { + "Const": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 55, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 71, + "user_ty": null + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "sucess", + "source_info": { + "scope": 3, + "span": 77 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 7, + "name": "test_sum_to_n" + } + }, + "symbol_name": "_ZN8sum_to_n13test_sum_to_n17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 1, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 16, + "kind": "ZeroSized", + "ty": 31 + }, + "span": 81, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 82 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 83 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 84, + "ty": 1 + }, + { + "mutability": "Not", + "span": 82, + "ty": 1 + } + ], + "span": 85, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 8, + "name": "main" + } + }, + "symbol_name": "_ZN8sum_to_n4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 48, + "user_ty": null + } + } + } + ] + }, + "span": 48 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [] + } + } + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 1 + } + }, + "span": 47 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 3, + "projection": [] + } + } + } + ] + }, + "span": 51 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "BinaryOp": [ + "Gt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 52, + "user_ty": null + } + } + ] + } + ] + }, + "span": 50 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 4, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 5 + ] + ], + "otherwise": 2 + } + } + }, + "span": 50 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 3, + "projection": [] + } + } + } + ] + }, + "span": 54 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Add", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Copy": { + "local": 6, + "projection": [] + } + } + ] + } + ] + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 7, + "projection": [ + { + "Field": [ + 1, + 25 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Add", + { + "Copy": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 6, + "projection": [] + } + } + ] + }, + "target": 3, + "unwind": "Continue" + } + }, + "span": 53 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 7, + "projection": [ + { + "Field": [ + 0, + 24 + ] + } + ] + } + } + } + ] + }, + "span": 53 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 3, + "projection": [] + } + } + } + ] + }, + "span": 57 + }, + { + "kind": { + "Assign": [ + { + "local": 9, + "projection": [] + }, + { + "CheckedBinaryOp": [ + "Sub", + { + "Copy": { + "local": 8, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 55, + "user_ty": null + } + } + ] + } + ] + }, + "span": 56 + } + ], + "terminator": { + "kind": { + "Assert": { + "cond": { + "Move": { + "local": 9, + "projection": [ + { + "Field": [ + 1, + 25 + ] + } + ] + } + }, + "expected": false, + "msg": { + "Overflow": [ + "Sub", + { + "Move": { + "local": 8, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 24 + }, + "span": 55, + "user_ty": null + } + } + ] + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 56 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Move": { + "local": 9, + "projection": [ + { + "Field": [ + 0, + 24 + ] + } + ] + } + } + } + ] + }, + "span": 58 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 1 + } + }, + "span": 47 + } + }, + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [] + } + } + } + ] + }, + "span": 60 + } + ], + "terminator": { + "kind": "Return", + "span": 59 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 61, + "ty": 24 + }, + { + "mutability": "Not", + "span": 62, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 63, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 64, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 50, + "ty": 25 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 57, + "ty": 24 + }, + { + "mutability": "Mut", + "span": 56, + "ty": 26 + } + ], + "span": 65, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "n", + "source_info": { + "scope": 0, + "span": 62 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "sum", + "source_info": { + "scope": 1, + "span": 63 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "counter", + "source_info": { + "scope": 2, + "span": 64 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "sum_to_n" + } + }, + "symbol_name": "_ZN8sum_to_n8sum_to_n17h" + } + ] +} diff --git a/tests/integration/programs/tuple-eq.rs b/tests/integration/programs/tuple-eq.rs new file mode 100644 index 0000000..0a79e18 --- /dev/null +++ b/tests/integration/programs/tuple-eq.rs @@ -0,0 +1,5 @@ +fn main() { + let tup:(i32, i32) = (42, 99); + + assert!(tup == (42, 99)); +} \ No newline at end of file diff --git a/tests/integration/programs/tuple-eq.smir.json.expected b/tests/integration/programs/tuple-eq.smir.json.expected new file mode 100644 index 0000000..d64beff --- /dev/null +++ b/tests/integration/programs/tuple-eq.smir.json.expected @@ -0,0 +1,2514 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0, + 99, + 0, + 0, + 0 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ], + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 116, + 117, + 112, + 32, + 61, + 61, + 32, + 40, + 52, + 50, + 44, + 32, + 57, + 57, + 41 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core3cmp5impls54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$i32$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core5tuple64_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$$LP$U$C$T$RP$$GT$2eq17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 41 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 41 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 42 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + "Deref" + ] + } + } + } + ] + }, + "span": 42 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "BinaryOp": [ + "Eq", + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ] + } + ] + }, + "span": 43 + }, + { + "kind": { + "StorageDead": 4 + }, + "span": 44 + }, + { + "kind": { + "StorageDead": 3 + }, + "span": 44 + } + ], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 45, + "ty": 20 + }, + { + "mutability": "Not", + "span": 46, + "ty": 21 + }, + { + "mutability": "Not", + "span": 47, + "ty": 21 + }, + { + "mutability": "Mut", + "span": 41, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 42, + "ty": 16 + } + ], + "span": 48, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 46 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 47 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 3, + "name": "std::cmp::impls::::eq" + } + }, + "symbol_name": "_ZN4core3cmp5impls54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$i32$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 49, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 16 + }, + { + "mutability": "Not", + "span": 49, + "ty": 23 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 1 + }, + { + "mutability": "Not", + "span": 49, + "ty": 7 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 49 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 49, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 49 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 49 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 49, + "ty": 16 + }, + { + "mutability": "Not", + "span": 49, + "ty": 12 + }, + { + "mutability": "Not", + "span": 49, + "ty": 1 + }, + { + "mutability": "Not", + "span": 49, + "ty": 25 + } + ], + "span": 49, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 4, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 50 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 50, + "ty": 1 + }, + { + "mutability": "Not", + "span": 50, + "ty": 23 + } + ], + "span": 50, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 3 + }, + "span": 51 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 52 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 16 + ] + } + ] + } + ] + } + ] + }, + "span": 52 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 53 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [ + "Deref", + { + "Field": [ + 0, + 16 + ] + } + ] + } + ] + } + ] + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + }, + { + "Move": { + "local": 5, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 51, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 51 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 3, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 51 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 5 + }, + "span": 54 + }, + { + "kind": { + "StorageDead": 4 + }, + "span": 54 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 52 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 1, + 16 + ] + } + ] + } + ] + } + ] + }, + "span": 52 + }, + { + "kind": { + "StorageLive": 7 + }, + "span": 53 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 2, + "projection": [ + "Deref", + { + "Field": [ + 1, + 16 + ] + } + ] + } + ] + } + ] + }, + "span": 53 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 7, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 8, + "kind": "ZeroSized", + "ty": 26 + }, + "span": 51, + "user_ty": null + } + }, + "target": 4, + "unwind": "Continue" + } + }, + "span": 51 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 5 + }, + "span": 54 + }, + { + "kind": { + "StorageDead": 4 + }, + "span": 54 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 20 + }, + "span": 51, + "user_ty": null + } + } + } + ] + }, + "span": 51 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 5 + } + }, + "span": 51 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 7 + }, + "span": 54 + }, + { + "kind": { + "StorageDead": 6 + }, + "span": 54 + } + ], + "terminator": { + "kind": { + "Goto": { + "target": 5 + } + }, + "span": 51 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 54 + } + ], + "terminator": { + "kind": "Return", + "span": 55 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 56, + "ty": 20 + }, + { + "mutability": "Not", + "span": 57, + "ty": 27 + }, + { + "mutability": "Not", + "span": 58, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 21 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 21 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 21 + }, + { + "mutability": "Mut", + "span": 53, + "ty": 21 + } + ], + "span": 59, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 0, + "span": 57 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "other", + "source_info": { + "scope": 0, + "span": 58 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "core::tuple::::eq" + } + }, + "symbol_name": "_ZN4core5tuple64_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$$LP$U$C$T$RP$$GT$2eq17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 61, + "user_ty": null + } + } + } + ] + }, + "span": 61 + } + ], + "terminator": { + "kind": "Return", + "span": 60 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 62, + "ty": 17 + }, + { + "mutability": "Not", + "span": 63, + "ty": 1 + } + ], + "span": 64, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 7, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + "Tuple", + [ + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 66, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 99, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 67, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 68 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 69 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 14, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 27 + }, + "span": 70, + "user_ty": null + } + } + } + ] + }, + "span": 70 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 28 + }, + "span": 65, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 65 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 3 + ] + ], + "otherwise": 2 + } + } + }, + "span": 65 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 71 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 16, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 33, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 1 + ] + ] + } + } + }, + "ty": 30 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 15, + "kind": "ZeroSized", + "ty": 29 + }, + "span": 72, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 72 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 73, + "ty": 1 + }, + { + "mutability": "Not", + "span": 74, + "ty": 31 + }, + { + "mutability": "Mut", + "span": 65, + "ty": 20 + }, + { + "mutability": "Mut", + "span": 69, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 70, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 72, + "ty": 32 + } + ], + "span": 75, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "tup", + "source_info": { + "scope": 1, + "span": 74 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + }, + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + "Tuple", + [ + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 76, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 13, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 99, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 77, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 70 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 70 + } + ], + "terminator": { + "kind": "Return", + "span": 70 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 70, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 70, + "ty": 31 + } + ], + "span": 70, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 8, + "name": "main" + } + }, + "symbol_name": "_ZN8tuple_eq4main17h" + } + ] +} diff --git a/tests/integration/programs/tuples-simple.rs b/tests/integration/programs/tuples-simple.rs new file mode 100644 index 0000000..9493bc4 --- /dev/null +++ b/tests/integration/programs/tuples-simple.rs @@ -0,0 +1,5 @@ +fn main() { + let tup:(i32, i32) = (42, 99); + + assert!(tup.0 != tup.1); +} \ No newline at end of file diff --git a/tests/integration/programs/tuples-simple.smir.json.expected b/tests/integration/programs/tuples-simple.smir.json.expected new file mode 100644 index 0000000..b289b9d --- /dev/null +++ b/tests/integration/programs/tuples-simple.smir.json.expected @@ -0,0 +1,1687 @@ +{ + "allocs": [ + [ + { + "Memory": { + "align": 1, + "bytes": [ + 97, + 115, + 115, + 101, + 114, + 116, + 105, + 111, + 110, + 32, + 102, + 97, + 105, + 108, + 101, + 100, + 58, + 32, + 116, + 117, + 112, + 46, + 48, + 32, + 33, + 61, + 32, + 116, + 117, + 112, + 46, + 49 + ], + "mutability": "Not", + "provenance": { + "ptrs": [] + } + } + } + ] + ], + "functions": [ + [ + { + "NormalSym": "_ZN3std2rt19lang_start_internal17h" + } + ], + [ + { + "NormalSym": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + } + ], + [ + { + "NormalSym": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "IntrinsicSym": "black_box" + } + ], + [ + { + "NormalSym": "_ZN4core3ops8function6FnOnce9call_once17h" + } + ], + [ + { + "NormalSym": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + } + ], + [ + { + "NormalSym": "_ZN4core9panicking5panic17h" + } + ], + [ + { + "NoOpSym": "" + } + ] + ], + "items": [ + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 0, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 1, + "projection": [] + }, + { + "Aggregate": [ + "Tuple", + [ + { + "Constant": { + "const_": { + "id": 9, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 42, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 48, + "user_ty": null + } + }, + { + "Constant": { + "const_": { + "id": 10, + "kind": { + "Allocated": { + "align": 4, + "bytes": [ + 99, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 16 + }, + "span": 49, + "user_ty": null + } + } + ] + ] + } + ] + }, + "span": 50 + }, + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 0, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 51 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + { + "Field": [ + 1, + 16 + ] + } + ] + } + } + } + ] + }, + "span": 52 + }, + { + "kind": { + "Assign": [ + { + "local": 2, + "projection": [] + }, + { + "BinaryOp": [ + "Ne", + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ] + } + ] + }, + "span": 47 + } + ], + "terminator": { + "kind": { + "SwitchInt": { + "discr": { + "Move": { + "local": 2, + "projection": [] + } + }, + "targets": { + "branches": [ + [ + 0, + 2 + ] + ], + "otherwise": 1 + } + } + }, + "span": 47 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 53 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 12, + "kind": { + "Allocated": { + "align": 8, + "bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [ + [ + 0, + 0 + ] + ] + } + } + }, + "ty": 25 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 11, + "kind": "ZeroSized", + "ty": 24 + }, + "span": 54, + "user_ty": null + } + }, + "target": null, + "unwind": "Continue" + } + }, + "span": 54 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 55, + "ty": 1 + }, + { + "mutability": "Not", + "span": 56, + "ty": 26 + }, + { + "mutability": "Mut", + "span": 47, + "ty": 27 + }, + { + "mutability": "Mut", + "span": 51, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 52, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 54, + "ty": 28 + } + ], + "span": 57, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "tup", + "source_info": { + "scope": 1, + "span": 56 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + } + ] + } + ], + "id": 6, + "name": "main" + } + }, + "symbol_name": "_ZN13tuples_simple4main17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 4, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 5 + }, + "span": 1 + }, + { + "kind": { + "StorageLive": 6 + }, + "span": 2 + }, + { + "kind": { + "StorageLive": 8 + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 8, + "projection": [] + }, + { + "Aggregate": [ + { + "Closure": [ + 1, + [ + { + "Type": 1 + }, + { + "Type": 2 + }, + { + "Type": 3 + }, + { + "Type": 4 + } + ] + ] + }, + [ + { + "Copy": { + "local": 1, + "projection": [] + } + } + ] + ] + } + ] + }, + "span": 3 + }, + { + "kind": { + "Assign": [ + { + "local": 7, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + "Shared", + { + "local": 8, + "projection": [] + } + ] + } + ] + }, + "span": 2 + }, + { + "kind": { + "Assign": [ + { + "local": 6, + "projection": [] + }, + { + "Cast": [ + { + "PointerCoercion": "Unsize" + }, + { + "Copy": { + "local": 7, + "projection": [] + } + }, + 5 + ] + } + ] + }, + "span": 2 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 6, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + }, + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 5, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 0, + "kind": "ZeroSized", + "ty": 0 + }, + "span": 0, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 1 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 6 + }, + "span": 5 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 5, + "projection": [ + { + "Downcast": 0 + }, + { + "Field": [ + 0, + 6 + ] + } + ] + } + } + } + ] + }, + "span": 6 + }, + { + "kind": { + "StorageDead": 8 + }, + "span": 7 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 7 + } + ], + "terminator": { + "kind": "Return", + "span": 4 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 8, + "ty": 6 + }, + { + "mutability": "Not", + "span": 9, + "ty": 7 + }, + { + "mutability": "Not", + "span": 10, + "ty": 6 + }, + { + "mutability": "Not", + "span": 11, + "ty": 8 + }, + { + "mutability": "Not", + "span": 12, + "ty": 9 + }, + { + "mutability": "Mut", + "span": 1, + "ty": 10 + }, + { + "mutability": "Mut", + "span": 2, + "ty": 5 + }, + { + "mutability": "Not", + "span": 2, + "ty": 11 + }, + { + "mutability": "Not", + "span": 3, + "ty": 12 + } + ], + "span": 13, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": 2, + "composite": null, + "name": "argc", + "source_info": { + "scope": 0, + "span": 10 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + }, + { + "argument_index": 3, + "composite": null, + "name": "argv", + "source_info": { + "scope": 0, + "span": 11 + }, + "value": { + "Place": { + "local": 3, + "projection": [] + } + } + }, + { + "argument_index": 4, + "composite": null, + "name": "sigpipe", + "source_info": { + "scope": 0, + "span": 12 + }, + "value": { + "Place": { + "local": 4, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "v", + "source_info": { + "scope": 1, + "span": 6 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + } + ] + } + ], + "id": 0, + "name": "std::rt::lang_start::<()>" + } + }, + "symbol_name": "_ZN3std2rt10lang_start17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "StorageLive": 2 + }, + "span": 16 + }, + { + "kind": { + "StorageLive": 3 + }, + "span": 15 + }, + { + "kind": { + "StorageLive": 4 + }, + "span": 17 + }, + { + "kind": { + "Assign": [ + { + "local": 4, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + } + ] + }, + "span": 17 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 4, + "projection": [] + } + } + ], + "destination": { + "local": 3, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 1, + "kind": "ZeroSized", + "ty": 13 + }, + "span": 14, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 15 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 4 + }, + "span": 19 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 2, + "kind": "ZeroSized", + "ty": 14 + }, + "span": 18, + "user_ty": null + } + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 16 + } + }, + { + "statements": [ + { + "kind": { + "StorageDead": 3 + }, + "span": 21 + }, + { + "kind": { + "StorageLive": 5 + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 5, + "projection": [] + }, + { + "Use": { + "Copy": { + "local": 2, + "projection": [ + { + "Field": [ + 0, + 15 + ] + }, + { + "Field": [ + 0, + 9 + ] + } + ] + } + } + } + ] + }, + "span": 22 + }, + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Cast": [ + "IntToInt", + { + "Move": { + "local": 5, + "projection": [] + } + }, + 16 + ] + } + ] + }, + "span": 23 + }, + { + "kind": { + "StorageDead": 5 + }, + "span": 24 + }, + { + "kind": { + "StorageDead": 2 + }, + "span": 25 + } + ], + "terminator": { + "kind": "Return", + "span": 20 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 26, + "ty": 16 + }, + { + "mutability": "Mut", + "span": 3, + "ty": 11 + }, + { + "mutability": "Mut", + "span": 16, + "ty": 17 + }, + { + "mutability": "Mut", + "span": 15, + "ty": 1 + }, + { + "mutability": "Mut", + "span": 17, + "ty": 7 + }, + { + "mutability": "Mut", + "span": 22, + "ty": 9 + } + ], + "span": 3, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": null, + "composite": null, + "name": "main", + "source_info": { + "scope": 0, + "span": 9 + }, + "value": { + "Place": { + "local": 1, + "projection": [ + "Deref", + { + "Field": [ + 0, + 7 + ] + } + ] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "self", + "source_info": { + "scope": 1, + "span": 27 + }, + "value": { + "Place": { + "local": 2, + "projection": [] + } + } + } + ] + } + ], + "id": 1, + "name": "std::rt::lang_start::<()>::{closure#0}" + } + }, + "symbol_name": "_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [] + } + }, + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 3, + "kind": "ZeroSized", + "ty": 18 + }, + "span": 28, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 30 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Constant": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + ], + "destination": { + "local": 2, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 5, + "kind": "ZeroSized", + "ty": 19 + }, + "span": 31, + "user_ty": null + } + }, + "target": 2, + "unwind": "Unreachable" + } + }, + "span": 32 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 33 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 34, + "ty": 1 + }, + { + "mutability": "Not", + "span": 35, + "ty": 7 + }, + { + "mutability": "Not", + "span": 36, + "ty": 1 + } + ], + "span": 39, + "spread_arg": null, + "var_debug_info": [ + { + "argument_index": 1, + "composite": null, + "name": "f", + "source_info": { + "scope": 0, + "span": 35 + }, + "value": { + "Place": { + "local": 1, + "projection": [] + } + } + }, + { + "argument_index": null, + "composite": null, + "name": "result", + "source_info": { + "scope": 1, + "span": 37 + }, + "value": { + "Place": { + "local": 0, + "projection": [] + } + } + }, + { + "argument_index": 1, + "composite": null, + "name": "dummy", + "source_info": { + "scope": 2, + "span": 38 + }, + "value": { + "Const": { + "const_": { + "id": 4, + "kind": "ZeroSized", + "ty": 1 + }, + "span": 29, + "user_ty": null + } + } + } + ] + } + ], + "id": 2, + "name": "std::sys::backtrace::__rust_begin_short_backtrace::" + } + }, + "symbol_name": "_ZN3std3sys9backtrace28__rust_begin_short_backtrace17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 1, + "projection": [ + "Deref" + ] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 6, + "kind": "ZeroSized", + "ty": 20 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 21 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": { + "Call": { + "args": [], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Move": { + "local": 1, + "projection": [] + } + }, + "target": 1, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 7 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": ">::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 2, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 3, + "projection": [] + }, + { + "Ref": [ + { + "kind": "ReErased" + }, + { + "Mut": { + "kind": "Default" + } + }, + { + "local": 1, + "projection": [] + } + ] + } + ] + }, + "span": 40 + } + ], + "terminator": { + "kind": { + "Call": { + "args": [ + { + "Move": { + "local": 3, + "projection": [] + } + }, + { + "Move": { + "local": 2, + "projection": [] + } + } + ], + "destination": { + "local": 0, + "projection": [] + }, + "func": { + "Constant": { + "const_": { + "id": 7, + "kind": "ZeroSized", + "ty": 22 + }, + "span": 40, + "user_ty": null + } + }, + "target": 1, + "unwind": { + "Cleanup": 3 + } + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 2, + "unwind": "Continue" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": { + "Drop": { + "place": { + "local": 1, + "projection": [] + }, + "target": 4, + "unwind": "Terminate" + } + }, + "span": 40 + } + }, + { + "statements": [], + "terminator": { + "kind": "Resume", + "span": 40 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 40, + "ty": 16 + }, + { + "mutability": "Not", + "span": 40, + "ty": 12 + }, + { + "mutability": "Not", + "span": 40, + "ty": 1 + }, + { + "mutability": "Not", + "span": 40, + "ty": 23 + } + ], + "span": 40, + "spread_arg": 2, + "var_debug_info": [] + } + ], + "id": 3, + "name": "<{closure@std::rt::lang_start<()>::{closure#0}} as std::ops::FnOnce<()>>::call_once" + } + }, + "symbol_name": "_ZN4core3ops8function6FnOnce9call_once17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [], + "terminator": { + "kind": "Return", + "span": 41 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 41, + "ty": 1 + }, + { + "mutability": "Not", + "span": 41, + "ty": 21 + } + ], + "span": 41, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 4, + "name": "std::ptr::drop_in_place::<{closure@std::rt::lang_start<()>::{closure#0}}>" + } + }, + "symbol_name": "_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h" + }, + { + "details": null, + "mono_item_kind": { + "MonoItemFn": { + "body": [ + { + "arg_count": 1, + "blocks": [ + { + "statements": [ + { + "kind": { + "Assign": [ + { + "local": 0, + "projection": [] + }, + { + "Use": { + "Constant": { + "const_": { + "id": 8, + "kind": { + "Allocated": { + "align": 1, + "bytes": [ + 0 + ], + "mutability": "Mut", + "provenance": { + "ptrs": [] + } + } + }, + "ty": 17 + }, + "span": 43, + "user_ty": null + } + } + } + ] + }, + "span": 43 + } + ], + "terminator": { + "kind": "Return", + "span": 42 + } + } + ], + "locals": [ + { + "mutability": "Mut", + "span": 44, + "ty": 17 + }, + { + "mutability": "Not", + "span": 45, + "ty": 1 + } + ], + "span": 46, + "spread_arg": null, + "var_debug_info": [] + } + ], + "id": 5, + "name": "<() as std::process::Termination>::report" + } + }, + "symbol_name": "_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h" + } + ] +}