SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Scene = struct @align(16) {
  lightViewProjMatrix:mat4x4<f32> @offset(0)
  cameraViewProjMatrix:mat4x4<f32> @offset(64)
  lightPos:vec3<f32> @offset(128)
}

FragmentInput = struct @align(16) {
  shadowPos:vec3<f32> @offset(0), @location(0)
  fragPos:vec3<f32> @offset(16), @location(1)
  fragNorm:vec3<f32> @offset(32), @location(2)
}

$B1: {  # root
  %scene:ptr<uniform, Scene, read> = var @binding_point(0, 0)
  %shadowMap:ptr<handle, texture_depth_2d, read> = var @binding_point(0, 1)
  %shadowSampler:ptr<handle, sampler_comparison, read> = var @binding_point(0, 2)
}

%tint_symbol = @fragment func(%input:FragmentInput):vec4<f32> [@location(0)] {
  $B2: {
    %visibility:ptr<function, f32, read_write> = var, 0.0f
    %oneOverShadowDepthTextureSize:f32 = let 0.0009765625f
    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
      $B3: {  # initializer
        %y:ptr<function, i32, read_write> = var, -1i
        next_iteration  # -> $B4
      }
      $B4: {  # body
        %9:i32 = load %y
        %10:bool = lte %9, 1i
        if %10 [t: $B6, f: $B7] {  # if_1
          $B6: {  # true
            exit_if  # if_1
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        loop [i: $B8, b: $B9, c: $B10] {  # loop_2
          $B8: {  # initializer
            %x:ptr<function, i32, read_write> = var, -1i
            next_iteration  # -> $B9
          }
          $B9: {  # body
            %12:i32 = load %x
            %13:bool = lte %12, 1i
            if %13 [t: $B11, f: $B12] {  # if_2
              $B11: {  # true
                exit_if  # if_2
              }
              $B12: {  # false
                exit_loop  # loop_2
              }
            }
            %14:i32 = load %x
            %15:f32 = convert %14
            %16:f32 = mul %15, %oneOverShadowDepthTextureSize
            %17:f32 = let %16
            %18:i32 = load %y
            %19:f32 = convert %18
            %20:f32 = mul %19, %oneOverShadowDepthTextureSize
            %21:vec2<f32> = construct %17, %20
            %offset:vec2<f32> = let %21
            %23:f32 = load %visibility
            %24:f32 = let %23
            %25:texture_depth_2d = load %shadowMap
            %26:sampler_comparison = load %shadowSampler
            %27:vec3<f32> = access %input, 0u
            %28:vec2<f32> = swizzle %27, xy
            %29:vec2<f32> = add %28, %offset
            %30:f32 = access %input, 0u, 2u
            %31:f32 = sub %30, 0.00700000021606683731f
            %32:f32 = textureSampleCompare %25, %26, %29, %31
            %33:f32 = add %24, %32
            store %visibility, %33
            continue  # -> $B10
          }
          $B10: {  # continuing
            %34:i32 = load %x
            %35:i32 = add %34, 1i
            store %x, %35
            next_iteration  # -> $B9
          }
        }
        continue  # -> $B5
      }
      $B5: {  # continuing
        %36:i32 = load %y
        %37:i32 = add %36, 1i
        store %y, %37
        next_iteration  # -> $B4
      }
    }
    %38:f32 = load %visibility
    %39:f32 = div %38, 9.0f
    store %visibility, %39
    %40:ptr<uniform, vec3<f32>, read> = access %scene, 2u
    %41:vec3<f32> = load %40
    %42:vec3<f32> = access %input, 1u
    %43:vec3<f32> = sub %41, %42
    %44:vec3<f32> = normalize %43
    %45:vec3<f32> = access %input, 2u
    %46:f32 = dot %44, %45
    %47:f32 = max %46, 0.0f
    %lambertFactor:f32 = let %47
    %49:f32 = load %visibility
    %50:f32 = mul %49, %lambertFactor
    %51:f32 = add 0.20000000298023223877f, %50
    %52:f32 = min %51, 1.0f
    %lightingFactor:f32 = let %52
    %54:vec3<f32> = mul %lightingFactor, vec3<f32>(0.89999997615814208984f)
    %55:vec4<f32> = construct %54, 1.0f
    ret %55
  }
}

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