[PATCH] D62591: [OpenCL][PR42031] Prevent deducing addr space in type alias.

Marco Antognini via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 29 11:36:10 PDT 2019

mantognini added inline comments.

Comment at: lib/Sema/SemaType.cpp:7355
+      // object.
+      (D.getContext() == DeclaratorContext::AliasDeclContext) ||
       // Do not deduce addr space for types used to define a typedef and the
I think this should also check for `!IsPointee` as it breaks the following example with `error: cannot initialize a variable of type 'c_ptr' (aka 'c1 *') with an rvalue of type 'c1 *'`.

struct c1 { int x; };
using c_ptr = c1*;

__kernel void test2() {
  c1 x = { 0 };
  c1* y = &x; // okay
  c_ptr z = &x; // fails

Comment at: test/SemaOpenCLCXX/address-space-deduction.cl:1
 //RUN: %clang_cc1 %s -cl-std=c++ -pedantic -ast-dump -verify
I guess it's an oversight from previous reviews, but FileCheck is not called here.

Comment at: test/SemaOpenCLCXX/address-space-deduction.cl:5
 //CHECK: |-VarDecl  foo {{.*}} 'const __global int' constexpr cinit
 constexpr int foo = 0;
The pattern should probably be:

`//CHECK: |-VarDecl {{.*}} foo 'const __global int' constexpr cinit`

(i.e. move the {{.*}} before foo).

Comment at: test/SemaOpenCLCXX/address-space-deduction.cl:10
   //CHECK: `-VarDecl {{.*}} foo2 'const __global int' static constexpr cinit
   static constexpr int foo2 = 0;
This check fails for me because `inline` is "missing" between `static` and `constexpr`. Not sure if it makes sense for `foo2` to be inline or not, but that's a different story.



More information about the cfe-commits mailing list