diff options
-rw-r--r-- | lib/AST/TypePrinter.cpp | 18 | ||||
-rw-r--r-- | test/SemaOpenCL/address-spaces.cl | 13 | ||||
-rw-r--r-- | test/SemaOpenCL/local.cl | 6 |
3 files changed, 28 insertions, 9 deletions
diff --git a/lib/AST/TypePrinter.cpp b/lib/AST/TypePrinter.cpp index ec6cb48bf8..e11e506572 100644 --- a/lib/AST/TypePrinter.cpp +++ b/lib/AST/TypePrinter.cpp @@ -1162,9 +1162,21 @@ void Qualifiers::getAsStringInternal(std::string &S, AppendTypeQualList(S, getCVRQualifiers()); if (unsigned addrspace = getAddressSpace()) { if (!S.empty()) S += ' '; - S += "__attribute__((address_space("; - S += llvm::utostr_32(addrspace); - S += ")))"; + switch (addrspace) { + case LangAS::opencl_global: + S += "__global"; + break; + case LangAS::opencl_local: + S += "__local"; + break; + case LangAS::opencl_constant: + S += "__constant"; + break; + default: + S += "__attribute__((address_space("; + S += llvm::utostr_32(addrspace); + S += ")))"; + } } if (Qualifiers::GC gc = getObjCGCAttr()) { if (!S.empty()) S += ' '; diff --git a/test/SemaOpenCL/address-spaces.cl b/test/SemaOpenCL/address-spaces.cl new file mode 100644 index 0000000000..6ab10b3507 --- /dev/null +++ b/test/SemaOpenCL/address-spaces.cl @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only + +__constant int ci = 1; + +__kernel void foo(__global int *gip) { + __local int li; + __local int lj = 2; // expected-error {{'__local' variable cannot have an initializer}} + + int *ip; + ip = gip; // expected-error {{assigning '__global int *' to 'int *' changes address space of pointer}} + ip = &li; // expected-error {{assigning '__local int *' to 'int *' changes address space of pointer}} + ip = &ci; // expected-error {{assigning '__constant int *' to 'int *' changes address space of pointer}} +} diff --git a/test/SemaOpenCL/local.cl b/test/SemaOpenCL/local.cl deleted file mode 100644 index 8637cfff30..0000000000 --- a/test/SemaOpenCL/local.cl +++ /dev/null @@ -1,6 +0,0 @@ -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only - -__kernel void foo(void) { - __local int i; - __local int j = 2; // expected-error {{'__local' variable cannot have an initializer}} -} |