reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
// RUN: %clang_cc1 -verify -fsyntax-only %s
// RUN: %clang_cc1 -Wconversion -verify -fsyntax-only -cl-std=CL2.0 %s

void test(void) {
  global int *glob;
  local int *loc;
  constant int *con;
  private int *priv;
  global float *glob_wrong_ty;
  typedef constant int const_int_ty;
  const_int_ty *con_typedef;

  glob = to_global(glob, loc);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-error@-2{{implicit declaration of function 'to_global' is invalid in OpenCL}}
  // expected-warning@-3{{incompatible integer to pointer conversion assigning to '__global int *' from 'int'}}
#else
  // expected-error@-5{{invalid number of arguments to function: 'to_global'}}
#endif

  int x;
  glob = to_global(x);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to '__global int *' from 'int'}}
#else
  // expected-error@-4{{invalid argument x to function: 'to_global', expecting a generic pointer argument}}
#endif

  glob = to_global(con);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to '__global int *' from 'int'}}
#else
  // expected-error@-4{{invalid argument con to function: 'to_global', expecting a generic pointer argument}}
#endif

  glob = to_global(con_typedef);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to '__global int *' from 'int'}}
#else
  // expected-error@-4{{invalid argument con_typedef to function: 'to_global', expecting a generic pointer argument}}
#endif

  loc = to_global(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to '__local int *' from 'int'}}
#else
  // expected-error@-4{{assigning '__global int *' to '__local int *' changes address space of pointer}}
  // expected-warning@-5{{passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance}}
#endif

  loc = to_private(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-error@-2{{implicit declaration of function 'to_private' is invalid in OpenCL}}
  // expected-warning@-3{{incompatible integer to pointer conversion assigning to '__local int *' from 'int'}}
#else
  // expected-error@-5{{assigning 'int *' to '__local int *' changes address space of pointer}}
  // expected-warning@-6{{passing non-generic address space pointer to to_private may cause dynamic conversion affecting performance}}
#endif

  loc = to_local(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-error@-2{{implicit declaration of function 'to_local' is invalid in OpenCL}}
  // expected-warning@-3{{incompatible integer to pointer conversion assigning to '__local int *' from 'int'}}
  // expected-note@-4{{did you mean 'to_global'}}
  // expected-note@13{{'to_global' declared here}}
#else
  // expected-warning@-7{{passing non-generic address space pointer to to_local may cause dynamic conversion affecting performance}}
#endif

  priv = to_global(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to 'int *' from 'int'}}
#else
  // expected-error@-4{{assigning '__global int *' to 'int *' changes address space of pointer}}
  // expected-warning@-5{{passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance}}
#endif

  priv = to_private(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to 'int *' from 'int'}}
#else
  // expected-warning@-4{{passing non-generic address space pointer to to_private may cause dynamic conversion affecting performance}}
#endif


  priv = to_local(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to 'int *' from 'int'}}
#else
  // expected-error@-4{{assigning '__local int *' to 'int *' changes address space of pointer}}
  // expected-warning@-5{{passing non-generic address space pointer to to_local may cause dynamic conversion affecting performance}}
#endif

  glob = to_global(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to '__global int *' from 'int'}}
#else
  // expected-warning@-4{{passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance}}
#endif

  glob = to_private(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to '__global int *' from 'int'}}
#else
  // expected-error@-4{{assigning 'int *' to '__global int *' changes address space of pointer}}
  // expected-warning@-5{{passing non-generic address space pointer to to_private may cause dynamic conversion affecting performance}}
#endif

  glob = to_local(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to '__global int *' from 'int'}}
#else
  // expected-error@-4{{assigning '__local int *' to '__global int *' changes address space of pointer}}
  // expected-warning@-5{{passing non-generic address space pointer to to_local may cause dynamic conversion affecting performance}}
#endif

  global char *glob_c = to_global(loc);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion initializing '__global char *' with an expression of type 'int'}}
#else
  // expected-warning@-4{{incompatible pointer types initializing '__global char *' with an expression of type '__global int *'}}
  // expected-warning@-5{{passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance}}
#endif

  glob_wrong_ty = to_global(glob);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
  // expected-warning@-2{{incompatible integer to pointer conversion assigning to '__global float *' from 'int'}}
#else
  // expected-warning@-4{{incompatible pointer types assigning to '__global float *' from '__global int *'}}
  // expected-warning@-5{{passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance}}
#endif

}