SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %visibility:ptr<function, f32, read_write> = var, 0.0f
    %oneOverShadowDepthTextureSize:f32 = let 0.0009765625f
    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
      %b3 = block {  # initializer
        %y:ptr<function, i32, read_write> = var, -1i
        next_iteration %b4
      }
      %b4 = block {  # body
        %9:i32 = load %y
        %10:bool = lte %9, 1i
        if %10 [t: %b6, f: %b7] {  # if_1
          %b6 = block {  # true
            exit_if  # if_1
          }
          %b7 = block {  # false
            exit_loop  # loop_1
          }
        }
        loop [i: %b8, b: %b9, c: %b10] {  # loop_2
          %b8 = block {  # initializer
            %x:ptr<function, i32, read_write> = var, -1i
            next_iteration %b9
          }
          %b9 = block {  # body
            %12:i32 = load %x
            %13:bool = lte %12, 1i
            if %13 [t: %b11, f: %b12] {  # if_2
              %b11 = block {  # true
                exit_if  # if_2
              }
              %b12 = block {  # false
                exit_loop  # loop_2
              }
            }
            %14:i32 = load %x
            %15:f32 = convert %14
            %16:f32 = mul %15, %oneOverShadowDepthTextureSize
            %17:i32 = load %y
            %18:f32 = convert %17
            %19:f32 = mul %18, %oneOverShadowDepthTextureSize
            %offset:vec2<f32> = construct %16, %19
            %21:f32 = load %visibility
            %22:texture_depth_2d = load %shadowMap
            %23:sampler_comparison = load %shadowSampler
            %24:vec3<f32> = access %input, 0u
            %25:vec2<f32> = swizzle %24, xy
            %26:vec2<f32> = add %25, %offset
            %27:f32 = access %input, 0u, 2u
            %28:f32 = sub %27, 0.00700000021606683731f
            %29:f32 = textureSampleCompare %22, %23, %26, %28
            %30:f32 = add %21, %29
            store %visibility, %30
            continue %b10
          }
          %b10 = block {  # continuing
            %31:i32 = load %x
            %32:i32 = add %31, 1i
            store %x, %32
            next_iteration %b9
          }
        }
        continue %b5
      }
      %b5 = block {  # continuing
        %33:i32 = load %y
        %34:i32 = add %33, 1i
        store %y, %34
        next_iteration %b4
      }
    }
    %35:f32 = load %visibility
    %36:f32 = div %35, 9.0f
    store %visibility, %36
    %37:ptr<uniform, vec3<f32>, read> = access %scene, 2u
    %38:vec3<f32> = load %37
    %39:vec3<f32> = access %input, 1u
    %40:vec3<f32> = sub %38, %39
    %41:vec3<f32> = normalize %40
    %42:vec3<f32> = access %input, 2u
    %43:f32 = dot %41, %42
    %lambertFactor:f32 = max %43, 0.0f
    %45:f32 = load %visibility
    %46:f32 = mul %45, %lambertFactor
    %47:f32 = add 0.20000000298023223877f, %46
    %lightingFactor:f32 = min %47, 1.0f
    %49:vec3<f32> = mul %lightingFactor, vec3<f32>(0.89999997615814208984f)
    %50:vec4<f32> = construct %49, 1.0f
    ret %50
  }
}

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