aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/SemaOpenCL/shifts.cl14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/SemaOpenCL/shifts.cl b/test/SemaOpenCL/shifts.cl
new file mode 100644
index 0000000000..f71927c7cf
--- /dev/null
+++ b/test/SemaOpenCL/shifts.cl
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 -x cl -O0 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s
+// OpenCL essentially reduces all shift amounts to the last word-size bits before evaluating.
+// Test this both for variables and constants evaluated in the front-end.
+
+//CHECK: @negativeShift32
+int negativeShift32(int a,int b) {
+ //CHECK: %array0 = alloca [256 x i8]
+ char array0[((int)1)<<40];
+ //CHECK: %array1 = alloca [256 x i8]
+ char array1[((int)1)<<(-24)];
+
+ //CHECK: ret i32 65536
+ return ((int)1)<<(-16);
+}