| SKIP: FAILED |
| |
| #include <metal_stdlib> |
| using namespace metal; |
| |
| threadgroup int a; |
| threadgroup int b; |
| threadgroup int c; |
| 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(); |
| } |
| kernel void main1(uint tint_local_index [[thread_index_in_threadgroup]]) { |
| if ((tint_local_index == 0u)) { |
| a = 0; |
| } |
| threadgroup_barrier(mem_flags::mem_threadgroup); |
| a = 42; |
| uses_a(); |
| } |
| kernel void main2(uint tint_local_index [[thread_index_in_threadgroup]]) { |
| if ((tint_local_index == 0u)) { |
| b = 0; |
| } |
| threadgroup_barrier(mem_flags::mem_threadgroup); |
| b = 7; |
| uses_b(); |
| } |
| kernel void main3(uint tint_local_index [[thread_index_in_threadgroup]]) { |
| if ((tint_local_index == 0u)) { |
| a = 0; |
| b = 0; |
| } |
| threadgroup_barrier(mem_flags::mem_threadgroup); |
| outer(); |
| no_uses(); |
| } |
| kernel void main4() { |
| no_uses(); |
| } |
| program_source:4:17: error: program scope variable must reside in constant address space |
| threadgroup int a; |
| ^ |
| program_source:5:17: error: program scope variable must reside in constant address space |
| threadgroup int b; |
| ^ |
| program_source:6:17: error: program scope variable must reside in constant address space |
| threadgroup int c; |
| ^ |
| program_source:26:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality] |
| if ((tint_local_index == 0u)) { |
| ~~~~~~~~~~~~~~~~~^~~~~ |
| program_source:26:25: note: remove extraneous parentheses around the comparison to silence this warning |
| if ((tint_local_index == 0u)) { |
| ~ ^ ~ |
| program_source:26:25: note: use '=' to turn this equality comparison into an assignment |
| if ((tint_local_index == 0u)) { |
| ^~ |
| = |
| program_source:34:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality] |
| if ((tint_local_index == 0u)) { |
| ~~~~~~~~~~~~~~~~~^~~~~ |
| program_source:34:25: note: remove extraneous parentheses around the comparison to silence this warning |
| if ((tint_local_index == 0u)) { |
| ~ ^ ~ |
| program_source:34:25: note: use '=' to turn this equality comparison into an assignment |
| if ((tint_local_index == 0u)) { |
| ^~ |
| = |
| program_source:42:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality] |
| if ((tint_local_index == 0u)) { |
| ~~~~~~~~~~~~~~~~~^~~~~ |
| program_source:42:25: note: remove extraneous parentheses around the comparison to silence this warning |
| if ((tint_local_index == 0u)) { |
| ~ ^ ~ |
| program_source:42:25: note: use '=' to turn this equality comparison into an assignment |
| if ((tint_local_index == 0u)) { |
| ^~ |
| = |
| |