From: Peter Collingbourne Date: Tue, 8 Nov 2011 02:52:58 +0000 (+0000) Subject: TypePrinter: print OpenCL address space names. Patch by Richard X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=63cf68a4fcb93b502934d0d9c4e2ea407180ceb9;p=clang TypePrinter: print OpenCL address space names. Patch by Richard Membarth, test case by myself. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144063 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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}} -}