1 // PR middle-end/68259 2 3 // { dg-do compile } 4 // { dg-options "-fsanitize=undefined -w" } 5 6 namespace std { 7 template < typename _Tp > class allocator { }; 8 template < typename _Tp, typename _Alloc 9 = std::allocator < _Tp > 10 >class vector { 11 public: 12 typedef _Tp value_type; push_back(const value_type & __x)13 void push_back (const value_type & __x) { } 14 }; 15 } 16 class Foo; 17 class FooBar { 18 public: 19 Foo * primitive_context; FooBar()20 FooBar () { } 21 FooBar (const FooBar & pnhp); 22 }; 23 template < class KEY, class CONTENT > class AVLTreeNode { }; 24 template < class KEY, class CONTENT > class FooTree final 25 { 26 FooBar insertPrimitive (); 27 public: seek_no_lock(const KEY & key)28AVLTreeNode < KEY, CONTENT > *seek_no_lock (const KEY & key) { } 29 void primitive_patterns ( std::vector < FooBar > &patterns); 30 }; 31 template < class KEY, class CONTENT > void FooTree < KEY, primitive_patterns(std::vector<FooBar> & patterns)32 CONTENT >::primitive_patterns ( std::vector <FooBar > &patterns) 33 { 34 patterns.push_back (insertPrimitive()); 35 } 36 template < class KEY, class CONTENT > insertPrimitive()37FooBar FooTree < KEY, CONTENT >::insertPrimitive () 38 { 39 FooBar place; 40 seek_no_lock (place.primitive_context); 41 return place; 42 } 43 class ManuverResults { }; 44 class opc_info_t 45 { 46 public: 47 FooTree < Foo *, ManuverResults > *primitivecache; 48 }; 49 static void do_optical_prox_corr_tsafe(opc_info_t * opc_info)50do_optical_prox_corr_tsafe (opc_info_t * opc_info) 51 { 52 std::vector < FooBar > patterns; 53 opc_info->primitivecache->primitive_patterns (patterns); 54 } 55