[llvm] r243996 - Avoid passing nullptr to std::equal.
Duncan P. N. Exon Smith via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 17 15:49:38 PDT 2015
> On 2015-Aug-17, at 15:27, Aaron Ballman <aaron at aaronballman.com> wrote:
>
> 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
This _DEBUG_POINTER macro seems to violate the standard in ways that
require weird workarounds for LLVM's uses of the STL.
It seems better to me to make MSVC's STL standards-compliant (when
building LLVM) than to duplicate all the STL algorithms inside
`namespace llvm`, which IMO is the best alternative.
It would be awesome if there were fewer "we don't follow the standard"
gotchas that most of us only find, post-commit, in MSVC buildbots.
>> 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