#version 310 es
precision mediump float;

shared int a;
void uses_a() {
  a = (a + 1);
}

void main1(uint local_invocation_index) {
  {
    a = 0;
  }
  barrier();
  a = 42;
  uses_a();
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  main1(gl_LocalInvocationIndex);
  return;
}
#version 310 es
precision mediump float;

shared int b;
void uses_b() {
  b = (b * 2);
}

void main2(uint local_invocation_index_1) {
  {
    b = 0;
  }
  barrier();
  b = 7;
  uses_b();
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  main2(gl_LocalInvocationIndex);
  return;
}
#version 310 es
precision mediump float;

shared int a;
shared int b;
void uses_a() {
  a = (a + 1);
}

void uses_b() {
  b = (b * 2);
}

void uses_a_and_b() {
  b = a;
}

void no_uses() {
}

void outer() {
  a = 0;
  uses_a();
  uses_a_and_b();
  uses_b();
  no_uses();
}

void main3(uint local_invocation_index_2) {
  {
    a = 0;
    b = 0;
  }
  barrier();
  outer();
  no_uses();
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  main3(gl_LocalInvocationIndex);
  return;
}
#version 310 es
precision mediump float;

void no_uses() {
}

void main4() {
  no_uses();
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  main4();
  return;
}
