Always insert the entry EBB before translating any WASM.
The FuncEnvironment callbacks (make_global in particular) may need to insert code in the entry EBB. We need to make sure the entry EBB has been inserted in the layout before making those callbacks.
This commit is contained in:
@@ -373,7 +373,7 @@ where
|
||||
}
|
||||
|
||||
/// Make sure that the current EBB is inserted in the layout.
|
||||
fn ensure_inserted_ebb(&mut self) {
|
||||
pub fn ensure_inserted_ebb(&mut self) {
|
||||
let ebb = self.position.ebb;
|
||||
if self.builder.ebbs[ebb].pristine {
|
||||
if !self.func.layout.is_ebb_inserted(ebb) {
|
||||
|
||||
@@ -84,6 +84,10 @@ impl FuncTranslator {
|
||||
let entry_block = builder.create_ebb();
|
||||
builder.switch_to_block(entry_block, &[]); // This also creates values for the arguments.
|
||||
builder.seal_block(entry_block);
|
||||
// Make sure the entry block is inserted in the layout before we make any callbacks to
|
||||
// `environ`. The callback functions may need to insert things in the entry block.
|
||||
builder.ensure_inserted_ebb();
|
||||
|
||||
let num_args = declare_wasm_arguments(builder);
|
||||
|
||||
// Set up the translation state with a single pushed control block representing the whole
|
||||
|
||||
Reference in New Issue
Block a user