SKIP: FAILED

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

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

%b1 = block {  # root
  %x_7: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 {
    %a:ptr<function, i32, read_write> = var
    %i0:ptr<function, i32, read_write> = var
    %i1:ptr<function, i32, read_write> = var
    %i2:ptr<function, i32, read_write> = var
    %i3:ptr<function, i32, read_write> = var
    %i4:ptr<function, i32, read_write> = var
    %i5:ptr<function, i32, read_write> = var
    %i6:ptr<function, i32, read_write> = var
    %i7:ptr<function, i32, read_write> = var
    %i8_1:ptr<function, i32, read_write> = var
    %i9:ptr<function, i32, read_write> = var
    store %a, 0i
    store %i0, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_40:i32 = load %i0
        %16:ptr<uniform, i32, read> = access %x_7, 0u
        %x_42:i32 = load %16
        %18:bool = lt %x_40, %x_42
        if %18 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        store %i1, 0i
        loop [b: %b7, c: %b8] {  # loop_2
          %b7 = block {  # body
            %x_49:i32 = load %i1
            %20:ptr<uniform, i32, read> = access %x_7, 0u
            %x_51:i32 = load %20
            %22:bool = lt %x_49, %x_51
            if %22 [t: %b9, f: %b10] {  # if_2
              %b9 = block {  # true
                exit_if  # if_2
              }
              %b10 = block {  # false
                exit_loop  # loop_2
              }
            }
            store %i2, 0i
            loop [b: %b11, c: %b12] {  # loop_3
              %b11 = block {  # body
                %x_58:i32 = load %i2
                %24:ptr<uniform, i32, read> = access %x_7, 0u
                %x_60:i32 = load %24
                %26:bool = lt %x_58, %x_60
                if %26 [t: %b13, f: %b14] {  # if_3
                  %b13 = block {  # true
                    exit_if  # if_3
                  }
                  %b14 = block {  # false
                    exit_loop  # loop_3
                  }
                }
                store %i3, 0i
                loop [b: %b15, c: %b16] {  # loop_4
                  %b15 = block {  # body
                    %x_67:i32 = load %i3
                    %28:ptr<uniform, i32, read> = access %x_7, 0u
                    %x_69:i32 = load %28
                    %30:i32 = add %x_69, 2i
                    %31:bool = lt %x_67, %30
                    if %31 [t: %b17, f: %b18] {  # if_4
                      %b17 = block {  # true
                        exit_if  # if_4
                      }
                      %b18 = block {  # false
                        exit_loop  # loop_4
                      }
                    }
                    store %i4, 0i
                    loop [b: %b19, c: %b20] {  # loop_5
                      %b19 = block {  # body
                        %x_77:i32 = load %i4
                        %33:ptr<uniform, i32, read> = access %x_7, 0u
                        %x_79:i32 = load %33
                        %35:bool = lt %x_77, %x_79
                        if %35 [t: %b21, f: %b22] {  # if_5
                          %b21 = block {  # true
                            exit_if  # if_5
                          }
                          %b22 = block {  # false
                            exit_loop  # loop_5
                          }
                        }
                        store %i5, 0i
                        loop [b: %b23, c: %b24] {  # loop_6
                          %b23 = block {  # body
                            %x_86:i32 = load %i5
                            %37:ptr<uniform, i32, read> = access %x_7, 0u
                            %x_88:i32 = load %37
                            %39:bool = lt %x_86, %x_88
                            if %39 [t: %b25, f: %b26] {  # if_6
                              %b25 = block {  # true
                                exit_if  # if_6
                              }
                              %b26 = block {  # false
                                exit_loop  # loop_6
                              }
                            }
                            loop [b: %b27, c: %b28] {  # loop_7
                              %b27 = block {  # body
                                %40:ptr<uniform, i32, read> = access %x_7, 0u
                                %x_96:i32 = load %40
                                %42:bool = gt %x_96, 0i
                                if %42 [t: %b29, f: %b30] {  # if_7
                                  %b29 = block {  # true
                                    exit_if  # if_7
                                  }
                                  %b30 = block {  # false
                                    exit_loop  # loop_7
                                  }
                                }
                                store %i6, 0i
                                loop [b: %b31, c: %b32] {  # loop_8
                                  %b31 = block {  # body
                                    %x_103:i32 = load %i6
                                    %44:ptr<uniform, i32, read> = access %x_7, 0u
                                    %x_105:i32 = load %44
                                    %46:bool = lt %x_103, %x_105
                                    if %46 [t: %b33, f: %b34] {  # if_8
                                      %b33 = block {  # true
                                        exit_if  # if_8
                                      }
                                      %b34 = block {  # false
                                        exit_loop  # loop_8
                                      }
                                    }
                                    store %i7, 0i
                                    loop [b: %b35, c: %b36] {  # loop_9
                                      %b35 = block {  # body
                                        %x_112:i32 = load %i7
                                        %48:ptr<uniform, i32, read> = access %x_7, 0u
                                        %x_114:i32 = load %48
                                        %50:bool = lt %x_112, %x_114
                                        if %50 [t: %b37, f: %b38] {  # if_9
                                          %b37 = block {  # true
                                            exit_if  # if_9
                                          }
                                          %b38 = block {  # false
                                            exit_loop  # loop_9
                                          }
                                        }
                                        store %i8_1, 0i
                                        loop [b: %b39, c: %b40] {  # loop_10
                                          %b39 = block {  # body
                                            %x_121:i32 = load %i8_1
                                            %52:ptr<uniform, i32, read> = access %x_7, 0u
                                            %x_123:i32 = load %52
                                            %54:bool = lt %x_121, %x_123
                                            if %54 [t: %b41, f: %b42] {  # if_10
                                              %b41 = block {  # true
                                                exit_if  # if_10
                                              }
                                              %b42 = block {  # false
                                                exit_loop  # loop_10
                                              }
                                            }
                                            store %i9, 0i
                                            loop [b: %b43, c: %b44] {  # loop_11
                                              %b43 = block {  # body
                                                %x_130:i32 = load %i9
                                                %56:ptr<uniform, i32, read> = access %x_7, 0u
                                                %x_132:i32 = load %56
                                                %58:bool = lt %x_130, %x_132
                                                if %58 [t: %b45, f: %b46] {  # if_11
                                                  %b45 = block {  # true
                                                    exit_if  # if_11
                                                  }
                                                  %b46 = block {  # false
                                                    exit_loop  # loop_11
                                                  }
                                                }
                                                %x_135:i32 = load %a
                                                %60:i32 = add %x_135, 1i
                                                store %a, %60
                                                continue %b44
                                              }
                                              %b44 = block {  # continuing
                                                %x_137:i32 = load %i9
                                                %62:i32 = add %x_137, 1i
                                                store %i9, %62
                                                next_iteration %b43
                                              }
                                            }
                                            continue %b40
                                          }
                                          %b40 = block {  # continuing
                                            %x_139:i32 = load %i8_1
                                            %64:i32 = add %x_139, 1i
                                            store %i8_1, %64
                                            next_iteration %b39
                                          }
                                        }
                                        continue %b36
                                      }
                                      %b36 = block {  # continuing
                                        %x_141:i32 = load %i7
                                        %66:i32 = add %x_141, 1i
                                        store %i7, %66
                                        next_iteration %b35
                                      }
                                    }
                                    continue %b32
                                  }
                                  %b32 = block {  # continuing
                                    %x_143:i32 = load %i6
                                    %68:i32 = add %x_143, 1i
                                    store %i6, %68
                                    next_iteration %b31
                                  }
                                }
                                exit_loop  # loop_7
                              }
                              %b28 = block {  # continuing
                                next_iteration %b27
                              }
                            }
                            continue %b24
                          }
                          %b24 = block {  # continuing
                            %x_145:i32 = load %i5
                            %70:i32 = add %x_145, 1i
                            store %i5, %70
                            next_iteration %b23
                          }
                        }
                        continue %b20
                      }
                      %b20 = block {  # continuing
                        %x_147:i32 = load %i4
                        %72:i32 = add %x_147, 1i
                        store %i4, %72
                        next_iteration %b19
                      }
                    }
                    continue %b16
                  }
                  %b16 = block {  # continuing
                    %x_149:i32 = load %i3
                    %74:i32 = add %x_149, 1i
                    store %i3, %74
                    next_iteration %b15
                  }
                }
                continue %b12
              }
              %b12 = block {  # continuing
                %x_151:i32 = load %i2
                %76:i32 = add %x_151, 1i
                store %i2, %76
                next_iteration %b11
              }
            }
            continue %b8
          }
          %b8 = block {  # continuing
            %x_153:i32 = load %i1
            %78:i32 = add %x_153, 1i
            store %i1, %78
            next_iteration %b7
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %x_155:i32 = load %i0
        %80:i32 = add %x_155, 1i
        store %i0, %80
        next_iteration %b3
      }
    }
    %x_157:i32 = load %a
    %82:bool = eq %x_157, 3i
    if %82 [t: %b47, f: %b48] {  # if_12
      %b47 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_12
      }
      %b48 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_12
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b49 {
  %b49 = block {
    %84:void = call %main_1
    %85:vec4<f32> = load %x_GLF_color
    %86:main_out = construct %85
    ret %86
  }
}

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.  *
********************************************************************
