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

Aaron Ballman via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 17 15:27:30 PDT 2015


On Mon, Aug 17, 2015 at 6:18 PM, Yaron Keren <yaron.keren at gmail.com> wrote:
> +aaron, reid
>
> Here is a patch disabling the iterator null pointer checking in Visual C++
> debug mode. This makes std::equal behave as expected instead of asserting on
> std::equal(nullpt,r nullptr, nullptr), saving an extra check just for Visual
> C++ debug mode here and there.
>
> It should not cause any practical problem debugging as if a null iterator is
> actually dereferenced (as opposed to compared) the debugger will stop on
> location.
>
> What do you think?

Mildly terrified. :-) This also disables really useful debugging tools
in other parts of the STL that have definitely found bugs for us in
the past. A lot of <algorithm>, <istream>, <ostream>, <locale>,
<memory>, <string>, and <utility> make use of _DEBUG_POINTER, which
this patch would disable.

I would *strongly* prefer to not disable that debugging functionality,
especially since this runtime-level debugging has found bugs our own
tests have not.

~Aaron

>
>
> 2015-08-17 23:45 GMT+03:00 Duncan P. N. Exon Smith <dexonsmith at apple.com>:
>>
>>
>> > On 2015-Aug-17, at 13:43, Yaron Keren <yaron.keren at gmail.com> wrote:
>> >
>> > I'm trying another approach. The non-null validation goes through a
>> > macro defined to a function which possibly may be predefined to nothing.
>> > This will disable all null checking on iterators in debug mode which is
>> > relevant to additional functions beyond std::equal. In practice it should
>> > not be a problem since if a null iterator is actually dereferenced (not only
>> > compared) then the debugger stops with invalid access anyhow.
>>
>> Well, this would be ideal :).
>
>


More information about the llvm-commits mailing list