r243343 - [sema] Fix infinite loop when using a boolean value as designated initializer.
Argyrios Kyrtzidis
akyrtzi at gmail.com
Wed Jul 29 10:35:18 PDT 2015
It’s safe enough to merge.
> On Jul 29, 2015, at 10:10 AM, Hans Wennborg <hans at chromium.org> wrote:
>
> Should this be merged to 3.7?
>
> On Mon, Jul 27, 2015 at 4:16 PM, Argyrios Kyrtzidis <akyrtzi at 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 at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list