// RUN: %clang_cc1 "-triple" "nvptx-nvidia-cuda" -fcuda-is-device -fsyntax-only -verify %s

#include "__clang_cuda_builtin_vars.h"
__attribute__((global))
void kernel(int *out) {
  int i = 0;
  out[i++] = threadIdx.x;
  threadIdx.x = 0; // expected-error {{no setter defined for property 'x'}}
  out[i++] = threadIdx.y;
  threadIdx.y = 0; // expected-error {{no setter defined for property 'y'}}
  out[i++] = threadIdx.z;
  threadIdx.z = 0; // expected-error {{no setter defined for property 'z'}}

  out[i++] = blockIdx.x;
  blockIdx.x = 0; // expected-error {{no setter defined for property 'x'}}
  out[i++] = blockIdx.y;
  blockIdx.y = 0; // expected-error {{no setter defined for property 'y'}}
  out[i++] = blockIdx.z;
  blockIdx.z = 0; // expected-error {{no setter defined for property 'z'}}

  out[i++] = blockDim.x;
  blockDim.x = 0; // expected-error {{no setter defined for property 'x'}}
  out[i++] = blockDim.y;
  blockDim.y = 0; // expected-error {{no setter defined for property 'y'}}
  out[i++] = blockDim.z;
  blockDim.z = 0; // expected-error {{no setter defined for property 'z'}}

  out[i++] = gridDim.x;
  gridDim.x = 0; // expected-error {{no setter defined for property 'x'}}
  out[i++] = gridDim.y;
  gridDim.y = 0; // expected-error {{no setter defined for property 'y'}}
  out[i++] = gridDim.z;
  gridDim.z = 0; // expected-error {{no setter defined for property 'z'}}

  out[i++] = warpSize;
  warpSize = 0; // expected-error {{cannot assign to variable 'warpSize' with const-qualified type 'const int'}}
  // expected-note@__clang_cuda_builtin_vars.h:* {{variable 'warpSize' declared const here}}

  // Make sure we can't construct or assign to the special variables.
  __cuda_builtin_threadIdx_t x; // expected-error {{calling a private constructor of class '__cuda_builtin_threadIdx_t'}}
  // expected-note@__clang_cuda_builtin_vars.h:* {{declared private here}}

  __cuda_builtin_threadIdx_t y = threadIdx; // expected-error {{calling a private constructor of class '__cuda_builtin_threadIdx_t'}}
  // expected-note@__clang_cuda_builtin_vars.h:* {{declared private here}}

  threadIdx = threadIdx; // expected-error {{'operator=' is a private member of '__cuda_builtin_threadIdx_t'}}
  // expected-note@__clang_cuda_builtin_vars.h:* {{declared private here}}

  void *ptr = &threadIdx; // expected-error {{'operator&' is a private member of '__cuda_builtin_threadIdx_t'}}
  // expected-note@__clang_cuda_builtin_vars.h:* {{declared private here}}

  // Following line should've caused an error as one is not allowed to
  // take address of a built-in variable in CUDA. Alas there's no way
  // to prevent getting address of a 'const int', so the line
  // currently compiles without errors or warnings.
  const void *wsptr = &warpSize;
}
