1*d1c8a151SAnastasia Stulova// RUN: %clang_cc1 %s -triple spir -emit-llvm -O0 -o - | FileCheck %s
2*d1c8a151SAnastasia Stulova
3*d1c8a151SAnastasia Stulova// Test that we don't initialize local address space objects.
4*d1c8a151SAnastasia Stulova//CHECK: @_ZZ4testE1i = internal addrspace(3) global i32 undef
5*d1c8a151SAnastasia Stulova//CHECK: @_ZZ4testE2ii = internal addrspace(3) global %class.C undef
6*d1c8a151SAnastasia Stulovaclass C {
7*d1c8a151SAnastasia Stulova  int i;
8*d1c8a151SAnastasia Stulova};
9*d1c8a151SAnastasia Stulova
10*d1c8a151SAnastasia Stulovakernel void test() {
11*d1c8a151SAnastasia Stulova  __local int i;
12*d1c8a151SAnastasia Stulova  __local C ii;
13*d1c8a151SAnastasia Stulova  // FIXME: In OpenCL C we don't accept initializers for local
14*d1c8a151SAnastasia Stulova  // address space variables. User defined initialization could
15*d1c8a151SAnastasia Stulova  // make sense, but would it mean that all work items need to
16*d1c8a151SAnastasia Stulova  // execute it? Potentially disallowing any initialization would
17*d1c8a151SAnastasia Stulova  // make things easier and assingments can be used to set specific
18*d1c8a151SAnastasia Stulova  // values. This rules should make it consistent with OpenCL C.
19*d1c8a151SAnastasia Stulova  //__local C c();
20*d1c8a151SAnastasia Stulova}
21