SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # 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: {
    %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: {  # body
        %15:i32 = load %i0
        %x_40:i32 = let %15
        %17:ptr<uniform, i32, read> = access %x_7, 0u
        %18:i32 = load %17
        %x_42:i32 = let %18
        %20:bool = lt %x_40, %x_42
        if %20 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        store %i1, 0i
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %21:i32 = load %i1
            %x_49:i32 = let %21
            %23:ptr<uniform, i32, read> = access %x_7, 0u
            %24:i32 = load %23
            %x_51:i32 = let %24
            %26:bool = lt %x_49, %x_51
            if %26 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            store %i2, 0i
            loop [b: $B11, c: $B12] {  # loop_3
              $B11: {  # body
                %27:i32 = load %i2
                %x_58:i32 = let %27
                %29:ptr<uniform, i32, read> = access %x_7, 0u
                %30:i32 = load %29
                %x_60:i32 = let %30
                %32:bool = lt %x_58, %x_60
                if %32 [t: $B13, f: $B14] {  # if_3
                  $B13: {  # true
                    exit_if  # if_3
                  }
                  $B14: {  # false
                    exit_loop  # loop_3
                  }
                }
                store %i3, 0i
                loop [b: $B15, c: $B16] {  # loop_4
                  $B15: {  # body
                    %33:i32 = load %i3
                    %x_67:i32 = let %33
                    %35:ptr<uniform, i32, read> = access %x_7, 0u
                    %36:i32 = load %35
                    %x_69:i32 = let %36
                    %38:i32 = add %x_69, 2i
                    %39:bool = lt %x_67, %38
                    if %39 [t: $B17, f: $B18] {  # if_4
                      $B17: {  # true
                        exit_if  # if_4
                      }
                      $B18: {  # false
                        exit_loop  # loop_4
                      }
                    }
                    store %i4, 0i
                    loop [b: $B19, c: $B20] {  # loop_5
                      $B19: {  # body
                        %40:i32 = load %i4
                        %x_77:i32 = let %40
                        %42:ptr<uniform, i32, read> = access %x_7, 0u
                        %43:i32 = load %42
                        %x_79:i32 = let %43
                        %45:bool = lt %x_77, %x_79
                        if %45 [t: $B21, f: $B22] {  # if_5
                          $B21: {  # true
                            exit_if  # if_5
                          }
                          $B22: {  # false
                            exit_loop  # loop_5
                          }
                        }
                        store %i5, 0i
                        loop [b: $B23, c: $B24] {  # loop_6
                          $B23: {  # body
                            %46:i32 = load %i5
                            %x_86:i32 = let %46
                            %48:ptr<uniform, i32, read> = access %x_7, 0u
                            %49:i32 = load %48
                            %x_88:i32 = let %49
                            %51:bool = lt %x_86, %x_88
                            if %51 [t: $B25, f: $B26] {  # if_6
                              $B25: {  # true
                                exit_if  # if_6
                              }
                              $B26: {  # false
                                exit_loop  # loop_6
                              }
                            }
                            loop [b: $B27] {  # loop_7
                              $B27: {  # body
                                %52:ptr<uniform, i32, read> = access %x_7, 0u
                                %53:i32 = load %52
                                %x_96:i32 = let %53
                                %55:bool = gt %x_96, 0i
                                if %55 [t: $B28, f: $B29] {  # if_7
                                  $B28: {  # true
                                    exit_if  # if_7
                                  }
                                  $B29: {  # false
                                    exit_loop  # loop_7
                                  }
                                }
                                store %i6, 0i
                                loop [b: $B30, c: $B31] {  # loop_8
                                  $B30: {  # body
                                    %56:i32 = load %i6
                                    %x_103:i32 = let %56
                                    %58:ptr<uniform, i32, read> = access %x_7, 0u
                                    %59:i32 = load %58
                                    %x_105:i32 = let %59
                                    %61:bool = lt %x_103, %x_105
                                    if %61 [t: $B32, f: $B33] {  # if_8
                                      $B32: {  # true
                                        exit_if  # if_8
                                      }
                                      $B33: {  # false
                                        exit_loop  # loop_8
                                      }
                                    }
                                    store %i7, 0i
                                    loop [b: $B34, c: $B35] {  # loop_9
                                      $B34: {  # body
                                        %62:i32 = load %i7
                                        %x_112:i32 = let %62
                                        %64:ptr<uniform, i32, read> = access %x_7, 0u
                                        %65:i32 = load %64
                                        %x_114:i32 = let %65
                                        %67:bool = lt %x_112, %x_114
                                        if %67 [t: $B36, f: $B37] {  # if_9
                                          $B36: {  # true
                                            exit_if  # if_9
                                          }
                                          $B37: {  # false
                                            exit_loop  # loop_9
                                          }
                                        }
                                        store %i8_1, 0i
                                        loop [b: $B38, c: $B39] {  # loop_10
                                          $B38: {  # body
                                            %68:i32 = load %i8_1
                                            %x_121:i32 = let %68
                                            %70:ptr<uniform, i32, read> = access %x_7, 0u
                                            %71:i32 = load %70
                                            %x_123:i32 = let %71
                                            %73:bool = lt %x_121, %x_123
                                            if %73 [t: $B40, f: $B41] {  # if_10
                                              $B40: {  # true
                                                exit_if  # if_10
                                              }
                                              $B41: {  # false
                                                exit_loop  # loop_10
                                              }
                                            }
                                            store %i9, 0i
                                            loop [b: $B42, c: $B43] {  # loop_11
                                              $B42: {  # body
                                                %74:i32 = load %i9
                                                %x_130:i32 = let %74
                                                %76:ptr<uniform, i32, read> = access %x_7, 0u
                                                %77:i32 = load %76
                                                %x_132:i32 = let %77
                                                %79:bool = lt %x_130, %x_132
                                                if %79 [t: $B44, f: $B45] {  # if_11
                                                  $B44: {  # true
                                                    exit_if  # if_11
                                                  }
                                                  $B45: {  # false
                                                    exit_loop  # loop_11
                                                  }
                                                }
                                                %80:i32 = load %a
                                                %x_135:i32 = let %80
                                                %82:i32 = add %x_135, 1i
                                                store %a, %82
                                                continue  # -> $B43
                                              }
                                              $B43: {  # continuing
                                                %83:i32 = load %i9
                                                %x_137:i32 = let %83
                                                %85:i32 = add %x_137, 1i
                                                store %i9, %85
                                                next_iteration  # -> $B42
                                              }
                                            }
                                            continue  # -> $B39
                                          }
                                          $B39: {  # continuing
                                            %86:i32 = load %i8_1
                                            %x_139:i32 = let %86
                                            %88:i32 = add %x_139, 1i
                                            store %i8_1, %88
                                            next_iteration  # -> $B38
                                          }
                                        }
                                        continue  # -> $B35
                                      }
                                      $B35: {  # continuing
                                        %89:i32 = load %i7
                                        %x_141:i32 = let %89
                                        %91:i32 = add %x_141, 1i
                                        store %i7, %91
                                        next_iteration  # -> $B34
                                      }
                                    }
                                    continue  # -> $B31
                                  }
                                  $B31: {  # continuing
                                    %92:i32 = load %i6
                                    %x_143:i32 = let %92
                                    %94:i32 = add %x_143, 1i
                                    store %i6, %94
                                    next_iteration  # -> $B30
                                  }
                                }
                                exit_loop  # loop_7
                              }
                            }
                            continue  # -> $B24
                          }
                          $B24: {  # continuing
                            %95:i32 = load %i5
                            %x_145:i32 = let %95
                            %97:i32 = add %x_145, 1i
                            store %i5, %97
                            next_iteration  # -> $B23
                          }
                        }
                        continue  # -> $B20
                      }
                      $B20: {  # continuing
                        %98:i32 = load %i4
                        %x_147:i32 = let %98
                        %100:i32 = add %x_147, 1i
                        store %i4, %100
                        next_iteration  # -> $B19
                      }
                    }
                    continue  # -> $B16
                  }
                  $B16: {  # continuing
                    %101:i32 = load %i3
                    %x_149:i32 = let %101
                    %103:i32 = add %x_149, 1i
                    store %i3, %103
                    next_iteration  # -> $B15
                  }
                }
                continue  # -> $B12
              }
              $B12: {  # continuing
                %104:i32 = load %i2
                %x_151:i32 = let %104
                %106:i32 = add %x_151, 1i
                store %i2, %106
                next_iteration  # -> $B11
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            %107:i32 = load %i1
            %x_153:i32 = let %107
            %109:i32 = add %x_153, 1i
            store %i1, %109
            next_iteration  # -> $B7
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %110:i32 = load %i0
        %x_155:i32 = let %110
        %112:i32 = add %x_155, 1i
        store %i0, %112
        next_iteration  # -> $B3
      }
    }
    %113:i32 = load %a
    %x_157:i32 = let %113
    %115:bool = eq %x_157, 3i
    if %115 [t: $B46, f: $B47] {  # if_12
      $B46: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_12
      }
      $B47: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_12
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B48: {
    %117:void = call %main_1
    %118:vec4<f32> = load %x_GLF_color
    %119:main_out = construct %118
    ret %119
  }
}

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