// { dg-do compile { target c++17 } } // { dg-additional-options "-Wno-analyzer-too-complex" } */ template struct iterator_traits; template struct iterator_traits<_Tp *> { typedef _Tp &reference; }; template struct __normal_iterator { _Iterator _M_current; __normal_iterator(_Iterator &__i) : _M_current(__i) {} typename iterator_traits<_Iterator>::reference operator*() { return *_M_current; } }; template struct allocator; template struct allocator_traits; template struct allocator_traits> { using pointer = _Tp *; }; struct TPkcs11Token; struct __alloc_traits : allocator_traits> {}; struct _Vector_base { typedef __alloc_traits::pointer pointer; struct { pointer _M_start; } _M_impl; }; struct : _Vector_base { __normal_iterator begin() { return _M_impl._M_start; } } list_tokens_token_list; struct TPkcs11Token { int *add_info; }; void list_tokens() { for (__normal_iterator base = list_tokens_token_list.begin();;) { int *add_info = new int; (*base).add_info = add_info; // { dg-warning "leak" } } }