]> granicus.if.org Git - clang/commitdiff
TypePrinter: print OpenCL address space names. Patch by Richard
authorPeter Collingbourne <peter@pcc.me.uk>
Tue, 8 Nov 2011 02:52:58 +0000 (02:52 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Tue, 8 Nov 2011 02:52:58 +0000 (02:52 +0000)
Membarth, test case by myself.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144063 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/TypePrinter.cpp
test/SemaOpenCL/address-spaces.cl [new file with mode: 0644]
test/SemaOpenCL/local.cl [deleted file]

index ec6cb48bf86629bf833f91221d41fca82c47927c..e11e5065728c4d831e2e7beb49696277fda8cc0b 100644 (file)
@@ -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 (file)
index 0000000..6ab10b3
--- /dev/null
@@ -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 (file)
index 8637cff..0000000
+++ /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}}
-}