#version 450

#extension GL_EXT_control_flow_attributes : enable

bool cond;

void f0() {
        [[loop]]                   for (;;) { }
}

void f1() {
        [[dont_unroll]]            while(true) {  }
}

void main()
{
        [[unroll]]                 for (int i = 0; i < 8; ++i) { }
	f0();
        [[dependency_infinite]]    do {  } while(true);
        [[dependency_length(1+3)]] for (int i = 0; i < 8; ++i) { }
        [[flatten]]                if (cond) { } else { }
        [[branch]]                 if (cond) cond = false;
        [[dont_flatten]]           switch(3) {  }                      // dropped
        [[dont_flatten]]           switch(3) { case 3: break; }

        // warnings on all these
        [[unroll(2)]]              for (int i = 0; i < 8; ++i) { }
        [[dont_unroll(-2)]]        while(true) {  }
        [[dependency_infinite(3)]] do {  } while(true);
        [[dependency_length]]      for (int i = 0; i < 8; ++i) { }
        [[flatten(3)]]             if (cond) { } else { }
        [[branch(5.2)]]            if (cond) cond = false;
        [[dont_flatten(3 + 7)]]    switch(3) { case 3: break; }

        // other valid uses
        [[ unroll, dont_unroll, dependency_length(2) ]]  while(cond) {  }
        [ [ dont_flatten , branch ] ]                    switch(3) { case 3: break; }
        [
            // attribute
            [
                // here
                flatten
            ]
        ]                       if (cond) { } else { }
        [[ dependency_length(2), dependency_infinite ]]  while(cond) {  }
}
