2013-01-24 23:14:22 +08:00
|
|
|
// 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.
|
|
|
|
|
2013-01-29 23:09:40 +08:00
|
|
|
// CHECK: @gtest1 = constant i64 2147483648
|
|
|
|
__constant const unsigned long gtest1 = 1UL << 31;
|
|
|
|
|
|
|
|
// CHECK: @negativeShift32
|
2013-01-24 23:14:22 +08:00
|
|
|
int negativeShift32(int a,int b) {
|
2013-01-29 23:09:40 +08:00
|
|
|
// CHECK: %array0 = alloca [256 x i8]
|
2013-01-24 23:14:22 +08:00
|
|
|
char array0[((int)1)<<40];
|
2013-01-29 23:09:40 +08:00
|
|
|
// CHECK: %array1 = alloca [256 x i8]
|
2013-01-24 23:14:22 +08:00
|
|
|
char array1[((int)1)<<(-24)];
|
|
|
|
|
2013-01-29 23:09:40 +08:00
|
|
|
// CHECK: ret i32 65536
|
2013-01-24 23:14:22 +08:00
|
|
|
return ((int)1)<<(-16);
|
|
|
|
}
|