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
This commit is contained in:
Peter Collingbourne 2011-11-08 02:52:58 +00:00
Родитель 13330c4e85
Коммит 63cf68a4fc
3 изменённых файлов: 28 добавлений и 9 удалений

Просмотреть файл

@ -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 += ' ';

Просмотреть файл

@ -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}}
}

Просмотреть файл

@ -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}}
}