[llvm] r243996 - Avoid passing nullptr to std::equal.

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 14:04:03 PDT 2015


(now cc'ing the new llvm-commits list)

On Tue, Aug 11, 2015 at 2:01 PM, Hans Wennborg <hans at chromium.org> wrote:
> On Tue, Aug 4, 2015 at 8:57 AM, Yaron Keren <yaron.keren at gmail.com> wrote:
>> Author: yrnkrn
>> Date: Tue Aug  4 10:57:04 2015
>> New Revision: 243996
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=243996&view=rev
>> Log:
>> Avoid passing nullptr to std::equal.
>> As documented in the LLVM Coding Standards, indeed MSVC incorrectly asserts
>> on this in Debug mode. This happens when building clang with Visual C++ and
>> -triple i686-pc-windows-gnu on these clang regression tests:
>>
>>  clang/test/CodeGen/2011-03-08-ZeroFieldUnionInitializer.c
>>  clang/test/CodeGen/empty-union-init.c
>
> Should we merge this to 3.7?
>
>> Modified: llvm/trunk/lib/IR/Type.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Type.cpp?rev=243996&r1=243995&r2=243996&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/IR/Type.cpp (original)
>> +++ llvm/trunk/lib/IR/Type.cpp Tue Aug  4 10:57:04 2015
>> @@ -612,7 +612,8 @@ bool StructType::isLayoutIdentical(Struc
>>        getNumElements() != Other->getNumElements())
>>      return false;
>>
>> -  return std::equal(element_begin(), element_end(), Other->element_begin());
>> +  return element_begin() &&
>> +         std::equal(element_begin(), element_end(), Other->element_begin());
>
> Actually, wouldn't std::equal return true if element_begin() and
> element_end() are both null? It seems the new code will now return
> false for that case. If two StructTypes both have zero elements,
> shouldn't they be considered as having identical layout?


More information about the llvm-commits mailing list