| Index: src/wasm/wasm-module-builder.cc
 | 
| diff --git a/src/wasm/wasm-module-builder.cc b/src/wasm/wasm-module-builder.cc
 | 
| index 084f5a0c1a08185d4c0021c86adc93957a93a9a1..941a0736c3272a53488121a3e3309619e4d90646 100644
 | 
| --- a/src/wasm/wasm-module-builder.cc
 | 
| +++ b/src/wasm/wasm-module-builder.cc
 | 
| @@ -255,8 +255,9 @@ void WasmModuleBuilder::MarkStartFunction(WasmFunctionBuilder* function) {
 | 
|  }
 | 
|  
 | 
|  uint32_t WasmModuleBuilder::AddGlobal(LocalType type, bool exported,
 | 
| -                                      bool mutability) {
 | 
| -  globals_.push_back({type, exported, mutability});
 | 
| +                                      bool mutability,
 | 
| +                                      const WasmInitExpr& init) {
 | 
| +  globals_.push_back({type, exported, mutability, init});
 | 
|    return static_cast<uint32_t>(globals_.size() - 1);
 | 
|  }
 | 
|  
 | 
| @@ -344,29 +345,64 @@ void WasmModuleBuilder::WriteTo(ZoneBuffer& buffer) const {
 | 
|      for (auto global : globals_) {
 | 
|        buffer.write_u8(WasmOpcodes::LocalTypeCodeFor(global.type));
 | 
|        buffer.write_u8(global.mutability ? 1 : 0);
 | 
| -      switch (global.type) {
 | 
| -        case kAstI32: {
 | 
| -          static const byte code[] = {WASM_I32V_1(0)};
 | 
| +      switch (global.init.kind) {
 | 
| +        case WasmInitExpr::kI32Const: {
 | 
| +          DCHECK_EQ(kAstI32, global.type);
 | 
| +          const byte code[] = {WASM_I32V_5(global.init.val.i32_const)};
 | 
|            buffer.write(code, sizeof(code));
 | 
|            break;
 | 
|          }
 | 
| -        case kAstF32: {
 | 
| -          static const byte code[] = {WASM_F32(0)};
 | 
| +        case WasmInitExpr::kI64Const: {
 | 
| +          DCHECK_EQ(kAstI64, global.type);
 | 
| +          const byte code[] = {WASM_I64V_10(global.init.val.i64_const)};
 | 
|            buffer.write(code, sizeof(code));
 | 
|            break;
 | 
|          }
 | 
| -        case kAstI64: {
 | 
| -          static const byte code[] = {WASM_I64V_1(0)};
 | 
| +        case WasmInitExpr::kF32Const: {
 | 
| +          DCHECK_EQ(kAstF32, global.type);
 | 
| +          const byte code[] = {WASM_F32(global.init.val.f32_const)};
 | 
|            buffer.write(code, sizeof(code));
 | 
|            break;
 | 
|          }
 | 
| -        case kAstF64: {
 | 
| -          static const byte code[] = {WASM_F64(0.0)};
 | 
| +        case WasmInitExpr::kF64Const: {
 | 
| +          DCHECK_EQ(kAstF64, global.type);
 | 
| +          const byte code[] = {WASM_F64(global.init.val.f64_const)};
 | 
|            buffer.write(code, sizeof(code));
 | 
|            break;
 | 
|          }
 | 
| -        default:
 | 
| -          UNREACHABLE();
 | 
| +        case WasmInitExpr::kGlobalIndex: {
 | 
| +          const byte code[] = {kExprGetGlobal,
 | 
| +                               U32V_5(global.init.val.global_index)};
 | 
| +          buffer.write(code, sizeof(code));
 | 
| +          break;
 | 
| +        }
 | 
| +        default: {
 | 
| +          // No initializer, emit a default value.
 | 
| +          switch (global.type) {
 | 
| +            case kAstI32: {
 | 
| +              const byte code[] = {WASM_I32V_1(0)};
 | 
| +              buffer.write(code, sizeof(code));
 | 
| +              break;
 | 
| +            }
 | 
| +            case kAstI64: {
 | 
| +              const byte code[] = {WASM_I64V_1(0)};
 | 
| +              buffer.write(code, sizeof(code));
 | 
| +              break;
 | 
| +            }
 | 
| +            case kAstF32: {
 | 
| +              const byte code[] = {WASM_F32(0.0)};
 | 
| +              buffer.write(code, sizeof(code));
 | 
| +              break;
 | 
| +            }
 | 
| +            case kAstF64: {
 | 
| +              const byte code[] = {WASM_F64(0.0)};
 | 
| +              buffer.write(code, sizeof(code));
 | 
| +              break;
 | 
| +            }
 | 
| +            default:
 | 
| +              UNREACHABLE();
 | 
| +          }
 | 
| +        }
 | 
|        }
 | 
|        buffer.write_u8(kExprEnd);
 | 
|      }
 | 
| 
 |