SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
  zero:i32 @offset(0)
}

Array = struct @align(4) {
  values:array<i32, 2> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # root
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %x_50:ptr<function, bool, read_write> = var, false
    %x_15:ptr<function, i32, read_write> = var
    %x_16:ptr<function, i32, read_write> = var
    %param:ptr<function, Array, read_write> = var
    %x_19:ptr<function, i32, read_write> = var
    %x_20_phi:ptr<function, i32, read_write> = var
    store %param, Array(array<i32, 2>(0i))
    store %x_50, false
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_19_phi:ptr<function, i32, read_write> = var
        %x_63_phi:ptr<function, bool, read_write> = var
        loop [b: %b5, c: %b6] {  # loop_2
          %b5 = block {  # body
            %12:ptr<uniform, i32, read> = access %x_8, 0u
            %x_17:i32 = load %12
            %14:ptr<function, i32, read_write> = access %param, 0u, %x_17
            %x_18:i32 = load %14
            %16:bool = eq %x_18, 1i
            if %16 [t: %b7] {  # if_1
              %b7 = block {  # true
                store %x_50, true
                store %x_15, 1i
                store %x_19_phi, 1i
                store %x_63_phi, true
                exit_loop  # loop_2
              }
            }
            store %x_19_phi, 0i
            store %x_63_phi, false
            exit_loop  # loop_2
          }
          %b6 = block {  # continuing
            next_iteration %b5
          }
        }
        %17:i32 = load %x_19_phi
        store %x_19, %17
        %x_63:bool = load %x_63_phi
        %19:i32 = load %x_19
        store %x_20_phi, %19
        if %x_63 [t: %b8] {  # if_2
          %b8 = block {  # true
            exit_loop  # loop_1
          }
        }
        store %x_50, true
        store %x_15, 1i
        store %x_20_phi, 1i
        exit_loop  # loop_1
      }
      %b4 = block {  # continuing
        next_iteration %b3
      }
    }
    %x_20:i32 = load %x_20_phi
    store %x_16, %x_20
    %21:bool = eq %x_20, 1i
    if %21 [t: %b9, f: %b10] {  # if_3
      %b9 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
      %b10 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b11 {
  %b11 = block {
    %23:void = call %main_1
    %24:vec4<f32> = load %x_GLF_color
    %25:main_out = construct %24
    ret %25
  }
}
%func_struct_Array_i1_2_1_ = func(%a:ptr<function, Array, read_write>):i32 -> %b12 {
  %b12 = block {
    %x_70:ptr<function, bool, read_write> = var, false
    %x_12:ptr<function, i32, read_write> = var
    %x_13:ptr<function, i32, read_write> = var
    %x_72_phi:ptr<function, bool, read_write> = var
    %x_14_phi:ptr<function, i32, read_write> = var
    store %x_72_phi, false
    loop [b: %b13, c: %b14] {  # loop_3
      %b13 = block {  # body
        %x_77:ptr<function, bool, read_write> = var
        %x_77_phi:ptr<function, bool, read_write> = var
        %x_13_phi:ptr<function, i32, read_write> = var
        %x_87_phi:ptr<function, bool, read_write> = var
        %x_72:bool = load %x_72_phi
        store %x_77_phi, %x_72
        loop [b: %b15, c: %b16] {  # loop_4
          %b15 = block {  # body
            %38:bool = load %x_77_phi
            store %x_77, %38
            %39:ptr<uniform, i32, read> = access %x_8, 0u
            %x_10:i32 = load %39
            %41:ptr<function, i32, read_write> = access %a, 0u, %x_10
            %x_11:i32 = load %41
            %43:bool = eq %x_11, 1i
            if %43 [t: %b17] {  # if_4
              %b17 = block {  # true
                store %x_70, true
                store %x_12, 1i
                store %x_13_phi, 1i
                store %x_87_phi, true
                exit_loop  # loop_4
              }
            }
            store %x_13_phi, 0i
            %44:bool = load %x_77
            store %x_87_phi, %44
            exit_loop  # loop_4
          }
          %b16 = block {  # continuing
            store %x_77_phi, false
            next_iteration %b15
          }
        }
        %45:i32 = load %x_13_phi
        store %x_13, %45
        %x_87:bool = load %x_87_phi
        %47:i32 = load %x_13
        store %x_14_phi, %47
        if %x_87 [t: %b18] {  # if_5
          %b18 = block {  # true
            exit_loop  # loop_3
          }
        }
        store %x_70, true
        store %x_12, 1i
        store %x_14_phi, 1i
        exit_loop  # loop_3
      }
      %b14 = block {  # continuing
        store %x_72_phi, false
        next_iteration %b13
      }
    }
    %x_14:i32 = load %x_14_phi
    ret %x_14
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
