SKIP: FAILED

intrinsics/gen/ignore/5c9edf.wgsl:29:3 warning: use of deprecated intrinsic
  ignore(arg_0);
  ^^^^^^


@group(1) @binding(0) var arg_0 : texture_external;

fn ignore_5c9edf() {
  ignore(arg_0);
}

@stage(vertex)
fn vertex_main() -> @builtin(position) vec4<f32> {
  ignore_5c9edf();
  return vec4<f32>();
}

@stage(fragment)
fn fragment_main() {
  ignore_5c9edf();
}

@stage(compute) @workgroup_size(1)
fn compute_main() {
  ignore_5c9edf();
}

Failed to generate: intrinsics/gen/ignore/5c9edf.wgsl:29:10 error: unknown identifier: 'arg_0'
  ignore(arg_0);
         ^^^^^


@group(1) @binding(0) var arg_0 : texture_external;

fn ignore_5c9edf() {
  ignore(arg_0);
}

@stage(vertex)
fn vertex_main() -> @builtin(position) vec4<f32> {
  ignore_5c9edf();
  return vec4<f32>();
}

@stage(fragment)
fn fragment_main() {
  ignore_5c9edf();
}

@stage(compute) @workgroup_size(1)
fn compute_main() {
  ignore_5c9edf();
}

Failed to generate: intrinsics/gen/ignore/5c9edf.wgsl:29:10 error: unknown identifier: 'arg_0'
  ignore(arg_0);
         ^^^^^


@group(1) @binding(0) var arg_0 : texture_external;

fn ignore_5c9edf() {
  ignore(arg_0);
}

@stage(vertex)
fn vertex_main() -> @builtin(position) vec4<f32> {
  ignore_5c9edf();
  return vec4<f32>();
}

@stage(fragment)
fn fragment_main() {
  ignore_5c9edf();
}

@stage(compute) @workgroup_size(1)
fn compute_main() {
  ignore_5c9edf();
}

Failed to generate: intrinsics/gen/ignore/5c9edf.wgsl:29:10 error: unknown identifier: 'arg_0'
  ignore(arg_0);
         ^^^^^

