#version 310 es
precision mediump float;

struct atomic_compare_exchange_resulti32 {
  int old_value;
  bool exchanged;
};


bool tint_discarded = false;
struct tint_symbol_1 {
  int old_value;
  bool exchanged;
};

layout(location = 0) out int value;
layout(binding = 0, std430) buffer a_block_ssbo {
  int inner;
} a;

int foo() {
  tint_discarded = true;
  int x = 0;
  tint_symbol_1 tint_symbol = tint_symbol_1(0, false);
  if (!(tint_discarded)) {
    atomic_compare_exchange_resulti32 atomic_compare_result;
    atomic_compare_result.old_value = atomicCompSwap(a.inner, 0, 1);
    atomic_compare_result.exchanged = atomic_compare_result.old_value == 0;
    atomic_compare_exchange_resulti32 tint_symbol_2 = atomic_compare_result;
    tint_symbol.old_value = tint_symbol_2.old_value;
    tint_symbol.exchanged = tint_symbol_2.exchanged;
  }
  tint_symbol_1 result = tint_symbol;
  if (result.exchanged) {
    x = result.old_value;
  }
  return x;
}

void main() {
  int inner_result = foo();
  value = inner_result;
  if (tint_discarded) {
    discard;
  }
  return;
}
