Should this be merged to 3.7?
On Mon, Jul 27, 2015 at 4:16 PM, Argyrios Kyrtzidis <akyr...@gmail.com> wrote: > Author: akirtzidis > Date: Mon Jul 27 18:16:53 2015 > New Revision: 243343 > > URL: http://llvm.org/viewvc/llvm-project?rev=243343&view=rev > Log: > [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 > > Added: > cfe/trunk/test/CodeGenObjCXX/designated-initializers.mm > Modified: > cfe/trunk/lib/Sema/SemaInit.cpp > > Modified: cfe/trunk/lib/Sema/SemaInit.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=243343&r1=243342&r2=243343&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaInit.cpp (original) > +++ cfe/trunk/lib/Sema/SemaInit.cpp Mon Jul 27 18:16:53 2015 > @@ -2372,14 +2372,12 @@ InitListChecker::CheckDesignatedInitiali > return true; > } > } else { > - // Make sure the bit-widths and signedness match. > - if (DesignatedStartIndex.getBitWidth() > > DesignatedEndIndex.getBitWidth()) > - DesignatedEndIndex > - = DesignatedEndIndex.extend(DesignatedStartIndex.getBitWidth()); > - else if (DesignatedStartIndex.getBitWidth() < > - DesignatedEndIndex.getBitWidth()) > - DesignatedStartIndex > - = DesignatedStartIndex.extend(DesignatedEndIndex.getBitWidth()); > + unsigned DesignatedIndexBitWidth = > + ConstantArrayType::getMaxSizeBits(SemaRef.Context); > + DesignatedStartIndex = > + DesignatedStartIndex.extOrTrunc(DesignatedIndexBitWidth); > + DesignatedEndIndex = > + DesignatedEndIndex.extOrTrunc(DesignatedIndexBitWidth); > DesignatedStartIndex.setIsUnsigned(true); > DesignatedEndIndex.setIsUnsigned(true); > } > > Added: cfe/trunk/test/CodeGenObjCXX/designated-initializers.mm > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/designated-initializers.mm?rev=243343&view=auto > ============================================================================== > --- cfe/trunk/test/CodeGenObjCXX/designated-initializers.mm (added) > +++ cfe/trunk/test/CodeGenObjCXX/designated-initializers.mm Mon Jul 27 > 18:16:53 2015 > @@ -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] > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits