tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

declared-segs.js (1271B)


      1 // Declared segments parse and validate
      2 wasmFullPass(`
      3 (module
      4 	(func $f1)
      5 	(elem declare func $f1)
      6 	(elem declare funcref (ref.null func))
      7 	(func $run)
      8 	(export "run" (func $run))
      9 )
     10 `);
     11 
     12 // Declared segments can be used with externref
     13 wasmFullPass(`
     14 (module
     15 	(elem declare externref (ref.null extern))
     16 	(func $run)
     17 	(export "run" (func $run))
     18 )
     19 `);
     20 
     21 // Declared segments cannot be used at runtime
     22 {
     23 let inst = wasmEvalText(`
     24 	(module
     25 		(func $f1)
     26 		(table 1 1 funcref)
     27 		(elem $e1 declare func $f1)
     28 		(func (export "testfn") (table.init $e1 (i32.const 0) (i32.const 0) (i32.const 1)))
     29 	)
     30 `);
     31 assertErrorMessage(() => inst.exports.testfn(), WebAssembly.RuntimeError, /index out of bounds/);
     32 }
     33 
     34 // Declared segments can be dropped, although this has no effect
     35 wasmEvalText(`
     36 (module
     37 	(func $f1)
     38 	(table 1 1 funcref)
     39 	(elem $e1 declare func $f1)
     40 	(func $start (elem.drop $e1) (elem.drop $e1))
     41 	(start $start)
     42 )
     43 `)
     44 
     45 // Declared segments don't cause initialization of a table
     46 wasmAssert(`
     47 (module
     48 	(func $f1)
     49 	(table 1 1 funcref)
     50 	(elem declare func $f1)
     51 	(func $at (param i32) (result i32)
     52 		local.get 0
     53 		table.get 0
     54 		ref.is_null
     55 	)
     56 	(export "at" (func $at))
     57 )
     58 `, [{type: 'i32', func: '$at', args: ['i32.const 0'], expected: '1'}]);