summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2015-07-27 23:16:53 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2015-07-27 23:16:53 +0000
commit4746c2fcdb2e19dc62811c6e2e5782697b5f7c4d (patch)
treeeb7ea9fae974d8833e66c0fbd80ac97de4201d6e /clang/test
parenta90d0992b7eeca503d02dd119b3e949df83b79d0 (diff)
downloadbcm5719-llvm-4746c2fcdb2e19dc62811c6e2e5782697b5f7c4d.tar.gz
bcm5719-llvm-4746c2fcdb2e19dc62811c6e2e5782697b5f7c4d.zip
[sema] Fix infinite loop when using a boolean value as designated initializer.
For designated indices use the max array size type bitwidth, not the bitwidth of the index value itself. rdar://21942503 llvm-svn: 243343
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CodeGenObjCXX/designated-initializers.mm36
1 files changed, 36 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjCXX/designated-initializers.mm b/clang/test/CodeGenObjCXX/designated-initializers.mm
new file mode 100644
index 00000000000..41a4271bc8c
--- /dev/null
+++ b/clang/test/CodeGenObjCXX/designated-initializers.mm
@@ -0,0 +1,36 @@
+// RUN: %clang_cc1 -triple arm64 %s -verify -emit-llvm -o - | FileCheck %s
+// expected-no-diagnostics
+
+// Make sure we don't enter an infinite loop (rdar://21942503)
+
+int vals1[] = {
+ [__objc_yes] = 1,
+ [__objc_no] = 2
+};
+// CHECK: @vals1 = global [2 x i32] [i32 2, i32 1]
+
+int vals2[] = {
+ [true] = 3,
+ [false] = 4
+};
+// CHECK: @vals2 = global [2 x i32] [i32 4, i32 3]
+
+int vals3[] = {
+ [false] = 1,
+ [true] = 2,
+ 5
+};
+// CHECK: @vals3 = global [3 x i32] [i32 1, i32 2, i32 5]
+
+int vals4[2] = {
+ [true] = 5,
+ [false] = 6
+};
+// CHECK: @vals4 = global [2 x i32] [i32 6, i32 5]
+
+int vals5[3] = {
+ [false] = 1,
+ [true] = 2,
+ 6
+};
+// CHECK: @vals5 = global [3 x i32] [i32 1, i32 2, i32 6]
OpenPOWER on IntegriCloud