Source code
Revision control
Copy as Markdown
Other Tools
/* Copyright 2021 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// ./test/core/memory_redundancy64.wast
// ./test/core/memory_redundancy64.wast:5
let $0 = instantiate(`(module
(memory i64 1 1)
(func (export "zero_everything")
(i32.store (i64.const 0) (i32.const 0))
(i32.store (i64.const 4) (i32.const 0))
(i32.store (i64.const 8) (i32.const 0))
(i32.store (i64.const 12) (i32.const 0))
)
(func (export "test_store_to_load") (result i32)
(i32.store (i64.const 8) (i32.const 0))
(f32.store (i64.const 5) (f32.const -0.0))
(i32.load (i64.const 8))
)
(func (export "test_redundant_load") (result i32)
(local $$t i32)
(local $$s i32)
(local.set $$t (i32.load (i64.const 8)))
(i32.store (i64.const 5) (i32.const 0x80000000))
(local.set $$s (i32.load (i64.const 8)))
(i32.add (local.get $$t) (local.get $$s))
)
(func (export "test_dead_store") (result f32)
(local $$t f32)
(i32.store (i64.const 8) (i32.const 0x23232323))
(local.set $$t (f32.load (i64.const 11)))
(i32.store (i64.const 8) (i32.const 0))
(local.get $$t)
)
;; A function named "malloc" which implementations nonetheless shouldn't
;; assume behaves like C malloc.
(func $$malloc (export "malloc")
(param $$size i64)
(result i64)
(i64.const 16)
)
;; Call malloc twice, but unlike C malloc, we don't get non-aliasing pointers.
(func (export "malloc_aliasing")
(result i32)
(local $$x i64)
(local $$y i64)
(local.set $$x (call $$malloc (i64.const 4)))
(local.set $$y (call $$malloc (i64.const 4)))
(i32.store (local.get $$x) (i32.const 42))
(i32.store (local.get $$y) (i32.const 43))
(i32.load (local.get $$x))
)
)`);
// ./test/core/memory_redundancy64.wast:59
assert_return(() => invoke($0, `test_store_to_load`, []), [value("i32", 128)]);
// ./test/core/memory_redundancy64.wast:60
invoke($0, `zero_everything`, []);
// ./test/core/memory_redundancy64.wast:61
assert_return(() => invoke($0, `test_redundant_load`, []), [value("i32", 128)]);
// ./test/core/memory_redundancy64.wast:62
invoke($0, `zero_everything`, []);
// ./test/core/memory_redundancy64.wast:63
assert_return(
() => invoke($0, `test_dead_store`, []),
[value("f32", 0.000000000000000000000000000000000000000000049)],
);
// ./test/core/memory_redundancy64.wast:64
invoke($0, `zero_everything`, []);
// ./test/core/memory_redundancy64.wast:65
assert_return(() => invoke($0, `malloc_aliasing`, []), [value("i32", 43)]);