SKIP: FAILED

#version 310 es
precision mediump float;

struct FragIn {
  float a;
  uint mask;
};

struct tint_symbol_3 {
  float a;
  float b;
  uint mask;
};

struct tint_symbol_4 {
  float a;
  uint mask;
};

FragIn tint_symbol_inner(FragIn tint_symbol_1, float b) {
  if ((tint_symbol_1.mask == 0u)) {
    return tint_symbol_1;
  }
  FragIn tint_symbol_5 = FragIn(b, 1u);
  return tint_symbol_5;
}

tint_symbol_4 tint_symbol(tint_symbol_3 tint_symbol_2) {
  FragIn tint_symbol_6 = FragIn(tint_symbol_2.a, tint_symbol_2.mask);
  FragIn inner_result = tint_symbol_inner(tint_symbol_6, tint_symbol_2.b);
  tint_symbol_4 wrapper_result = tint_symbol_4(0.0f, 0u);
  wrapper_result.a = inner_result.a;
  wrapper_result.mask = inner_result.mask;
  return wrapper_result;
}
layout(location = 0) in float a;
layout(location = 1) in float b;

layout(location = 0) out float a;


void main() {
  tint_symbol_3 inputs;
  inputs.a = a;
  inputs.b = b;
  inputs.mask = uint(gl_SampleMask);
  tint_symbol_4 outputs;
  outputs = tint_symbol(inputs);
  a = outputs.a;
  gl_SampleMask = outputs.mask;
}

Error parsing GLSL shader:
ERROR: 0:39: 'a' : redefinition 
ERROR: 1 compilation errors.  No code generated.



