MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / switch_seal_generated_blocks

Function switch_seal_generated_blocks

cranelift/frontend/src/switch.rs:531–573  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

529
530 #[test]
531 fn switch_seal_generated_blocks() {
532 let cases = &[vec![0, 1, 2], vec![0, 1, 2, 10, 11, 12, 20, 30, 40, 50]];
533
534 for case in cases {
535 for typ in &[types::I8, types::I16, types::I32, types::I64, types::I128] {
536 eprintln!("Testing {typ:?} with keys: {case:?}");
537 do_case(case, *typ);
538 }
539 }
540
541 fn do_case(keys: &[u128], typ: Type) {
542 let mut func = Function::new();
543 let mut builder_ctx = FunctionBuilderContext::new();
544 let mut builder = FunctionBuilder::new(&mut func, &mut builder_ctx);
545
546 let root_block = builder.create_block();
547 let default_block = builder.create_block();
548 let mut switch = Switch::new();
549
550 let case_blocks = keys
551 .iter()
552 .map(|key| {
553 let block = builder.create_block();
554 switch.set_entry(*key, block);
555 block
556 })
557 .collect::<Vec<_>>();
558
559 builder.seal_block(root_block);
560 builder.switch_to_block(root_block);
561
562 let val = builder.ins().iconst(typ, 1);
563 switch.emit(&mut builder, val, default_block);
564
565 for &block in case_blocks.iter().chain(std::iter::once(&default_block)) {
566 builder.seal_block(block);
567 builder.switch_to_block(block);
568 builder.ins().return_(&[]);
569 }
570
571 builder.finalize(); // Will panic if some blocks are not sealed
572 }
573 }
574
575 #[test]
576 fn switch_64bit() {

Callers

nothing calls this directly

Calls 1

do_caseFunction · 0.85

Tested by

no test coverage detected