forked from OSchip/llvm-project
parent
7b999ea7b7
commit
87c1991bb4
|
@ -1,18 +0,0 @@
|
|||
// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm-bc -o - %s | opt -std-compile-opts | llvm-dis > %t
|
||||
// RUN: grep "ret i32" %t | count 1
|
||||
// RUN: grep "ret i32 10" %t | count 1
|
||||
|
||||
// Ensure that default after a case range is not ignored.
|
||||
|
||||
static int f1(unsigned x) {
|
||||
switch(x) {
|
||||
case 10 ... 0xFFFFFFFF:
|
||||
return 0;
|
||||
default:
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
|
||||
int g() {
|
||||
return f1(2);
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm-bc -o - %s | opt -std-compile-opts | llvm-dis > %t
|
||||
// RUN: grep "ret i32 10" %t
|
||||
|
||||
// Ensure that this doesn't compile to infinite loop in g() due to
|
||||
// miscompilation of fallthrough from default to a (tested) case
|
||||
// range.
|
||||
|
||||
static int f0(unsigned x) {
|
||||
switch(x) {
|
||||
default:
|
||||
x += 1;
|
||||
case 10 ... 0xFFFFFFFF:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int g() {
|
||||
f0(1);
|
||||
return 10;
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm-bc -o - %s | opt -std-compile-opts | llvm-dis > %t
|
||||
// RUN: grep "ret i32" %t | count 2
|
||||
// RUN: grep "ret i32 3" %t | count 2
|
||||
|
||||
// This generated incorrect code because of poor switch chaining.
|
||||
int f1(int x) {
|
||||
switch(x) {
|
||||
default:
|
||||
return 3;
|
||||
case 10 ... 0xFFFFFFFF:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// This just asserted because of the way case ranges were calculated.
|
||||
int f2(int x) {
|
||||
switch (x) {
|
||||
default:
|
||||
return 3;
|
||||
case 10 ... -1:
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm-bc -o - %s | opt -std-compile-opts | llvm-dis > %t
|
||||
// RUN: grep "ret i32 %" %t
|
||||
|
||||
// Make sure return is not constant (if empty range is skipped or miscompiled)
|
||||
|
||||
int f0(unsigned x) {
|
||||
switch(x) {
|
||||
case 2:
|
||||
// fallthrough empty range
|
||||
case 10 ... 9:
|
||||
return 10;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm-bc -o - %s | opt -std-compile-opts | llvm-dis > %t
|
||||
// RUN: grep "ret i32" %t | count 1
|
||||
// RUN: grep "ret i32 3" %t | count 1
|
||||
|
||||
int f2(unsigned x) {
|
||||
switch(x) {
|
||||
default:
|
||||
return 3;
|
||||
case 0xFFFFFFFF ... 1: // This range should be empty because x is unsigned.
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -100,3 +100,97 @@ void foo7(){
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// CHECK: define i32 @f8(
|
||||
// CHECK: ret i32 3
|
||||
// CHECK: }
|
||||
int f8(unsigned x) {
|
||||
switch(x) {
|
||||
default:
|
||||
return 3;
|
||||
case 0xFFFFFFFF ... 1: // This range should be empty because x is unsigned.
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure that default after a case range is not ignored.
|
||||
//
|
||||
// CHECK: define i32 @f9()
|
||||
// CHECK: ret i32 10
|
||||
// CHECK: }
|
||||
static int f9_0(unsigned x) {
|
||||
switch(x) {
|
||||
case 10 ... 0xFFFFFFFF:
|
||||
return 0;
|
||||
default:
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
int f9() {
|
||||
return f9_0(2);
|
||||
}
|
||||
|
||||
// Ensure that this doesn't compile to infinite loop in g() due to
|
||||
// miscompilation of fallthrough from default to a (tested) case
|
||||
// range.
|
||||
//
|
||||
// CHECK: define i32 @f10()
|
||||
// CHECK: ret i32 10
|
||||
// CHECK: }
|
||||
static int f10_0(unsigned x) {
|
||||
switch(x) {
|
||||
default:
|
||||
x += 1;
|
||||
case 10 ... 0xFFFFFFFF:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int f10() {
|
||||
f10_0(1);
|
||||
return 10;
|
||||
}
|
||||
|
||||
// This generated incorrect code because of poor switch chaining.
|
||||
//
|
||||
// CHECK: define i32 @f11(
|
||||
// CHECK: ret i32 3
|
||||
// CHECK: }
|
||||
int f11(int x) {
|
||||
switch(x) {
|
||||
default:
|
||||
return 3;
|
||||
case 10 ... 0xFFFFFFFF:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// This just asserted because of the way case ranges were calculated.
|
||||
//
|
||||
// CHECK: define i32 @f12(
|
||||
// CHECK: ret i32 3
|
||||
// CHECK: }
|
||||
int f12(int x) {
|
||||
switch (x) {
|
||||
default:
|
||||
return 3;
|
||||
case 10 ... -1:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure return is not constant (if empty range is skipped or miscompiled)
|
||||
//
|
||||
// CHECK: define i32 @f13(
|
||||
// CHECK: ret i32 %
|
||||
// CHECK: }
|
||||
int f13(unsigned x) {
|
||||
switch(x) {
|
||||
case 2:
|
||||
// fallthrough empty range
|
||||
case 10 ... 9:
|
||||
return 10;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue