[PATCH] Fix tests sensitive to internal library allocations
François Dumont
frs.dumont@gmail.com
Mon Aug 21 20:20:57 GMT 2023
Here is the updated and tested patch.
On 21/08/2023 20:07, Jonathan Wakely wrote:
> On Mon, 21 Aug 2023 at 18:05, François Dumont via Libstdc++
> <libstdc++@gcc.gnu.org> wrote:
>> Hi
>>
>> Here is a propocal to fix tests sensitive to libstdc++ internal allocations.
> Surely the enter() and exit() calls should be a constructor and destructor?
>
> The constructor could use count() to get the count, and then restore
> it in the destructor. Something like:
>
> --- a/libstdc++-v3/testsuite/util/replacement_memory_operators.h
> +++ b/libstdc++-v3/testsuite/util/replacement_memory_operators.h
> @@ -75,12 +75,30 @@ namespace __gnu_test
> counter& cntr = get();
> cntr._M_increments = cntr._M_decrements = 0;
> }
> +
> + struct scope
> + {
> + scope() : _M_count(counter::count()) { }
> + ~scope() { counter::get()._M_count = _M_count; }
> +
> + private:
> + std::size_t _M_count;
> +
> +#if __cplusplus >= 201103L
> + scope(const scope&) = delete;
> + scope& operator=(const scope&) = delete;
> +#else
> + scope(const scope&);
> + scope& operator=(const scope&);
> +#endif
> + };
> };
>
> template<typename Alloc, bool uses_global_new>
> bool
> check_new(Alloc a = Alloc())
> {
> + __gnu_test::counter::scope s;
> __gnu_test::counter::exceptions(false);
> __gnu_test::counter::reset();
> (void) a.allocate(10);
>
>
>
>
>
>
>> Tested by restoring allocation in tzdb.cc.
>>
>> As announced I'm also adding a test to detect such allocations. If it is
>> ok let me know if you prefer to see it in a different place.
> The test is a good idea. I think 17_intro/no_library_allocation.cc
> would be a better place for it.
>
>> libstdc++: Fix tests relying on operator new/delete overload
>>
>> Fix tests that are checking for an allocation plan. They are failing if
>> an allocation is taking place outside the test.
>>
>> libstdc++-v3/ChangeLog
>>
>> * testsuite/util/replacement_memory_operators.h
>> (counter::_M_pre_enter_count): New.
>> (counter::enter, counter::exit): New static methods to call
>> on main() enter/exit.
>> * testsuite/23_containers/unordered_map/96088.cc (main):
>> Call __gnu_test::counter::enter/exit.
>> * testsuite/23_containers/unordered_multimap/96088.cc
>> (main): Likewise.
>> * testsuite/23_containers/unordered_multiset/96088.cc
>> (main): Likewise.
>> * testsuite/23_containers/unordered_set/96088.cc (main):
>> Likewise.
>> * testsuite/ext/malloc_allocator/deallocate_local.cc
>> (main): Likewise.
>> * testsuite/ext/new_allocator/deallocate_local.cc (main):
>> Likewise.
>> * testsuite/ext/throw_allocator/deallocate_local.cc (main):
>> Likewise.
>> * testsuite/ext/pool_allocator/allocate_chunk.cc (started):
>> New global.
>> (operator new(size_t)): Check started.
>> (main): Set/Unset started.
>> * testsuite/ext/no_library_allocation.cc: New test case.
>>
>> Ok to commit ?
>>
>> François
-------------- next part --------------
A non-text attachment was scrubbed...
Name: alloc_aware_tests.patch
Type: text/x-patch
Size: 6027 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20230821/48b14500/attachment-0001.bin>
More information about the Libstdc++
mailing list