diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/ipa/pr58371.C')
-rw-r--r-- | gcc/testsuite/g++.dg/ipa/pr58371.C | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/ipa/pr58371.C b/gcc/testsuite/g++.dg/ipa/pr58371.C new file mode 100644 index 00000000000..00cfbb831fc --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/pr58371.C @@ -0,0 +1,204 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + + +typedef int size_t; +namespace { +template < typename > struct char_traits; +} +namespace __gnu_cxx { +template < typename > class new_allocator { +}; +} +namespace std { +template < typename _Tp > class allocator:__gnu_cxx::new_allocator < _Tp > { +public: + size_t size_type; + typedef _Tp & const_reference; + template < typename > struct rebind { + typedef allocator other; + }; +}; +} +namespace __gnu_cxx { +template < typename _Alloc > struct __alloc_traits { + typedef typename _Alloc::const_reference const_reference; + template < typename _Tp > struct rebind { + typedef typename _Alloc::template rebind < _Tp >::other other; + }; +}; +} +namespace std { +struct __numeric_limits_base { +}; +template < typename _Tp > struct numeric_limits:__numeric_limits_base { + static _Tp max () { + } +}; +template < typename _Tp, typename _Alloc > struct _Vector_base { + typedef typename __gnu_cxx::__alloc_traits < _Alloc >::template rebind < + _Tp >::other _Tp_alloc_type; +}; +template < typename _Tp, typename _Alloc = std::allocator < _Tp > >class vector:_Vector_base < _Tp, + _Alloc + > { + typedef _Vector_base < _Tp, _Alloc > _Base; + typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; + typedef __gnu_cxx::__alloc_traits < _Tp_alloc_type > _Alloc_traits; +public: + _Tp value_type; + typedef typename _Alloc_traits::const_reference const_reference; + typedef size_t size_type; + size_type size () { + } const_reference operator[] (size_type) { + } +}; +template < typename _CharT, typename = +char_traits < _CharT > >class basic_ostream; +typedef basic_ostream < int >ostream; +class ios_base { +}; +template < typename, typename > class basic_ios:ios_base { +}; +template < typename _CharT, typename _Traits > class basic_ostream:basic_ios < _CharT, + _Traits + > { +public: + _CharT char_type; + typedef basic_ostream __ostream_type; + __ostream_type & operator<< (const void *) { + } +}; +} +namespace logging { +int GetMinLogLevel (); +typedef int LogSeverity; +LogSeverity LOG_ERROR_REPORT; +LogSeverity LOG_DCHECK; +class LogMessage { +public: + LogMessage (const char *, int, LogSeverity); + std::ostream & stream () { + } +}; +class LogMessageVoidify { +public: + LogMessageVoidify () { + } void operator& (std::ostream &) { + } +}; +} +namespace base { +namespace internal { +class WeakPtrBase { +}; +class SupportsWeakPtrBase { +}; +} template < typename T > class WeakPtr:internal::WeakPtrBase { +public: + WeakPtr () :ptr_ () { + } T *operator-> () { + logging:0 && + logging::LOG_DCHECK >= + logging::GetMinLogLevel () ? (void) 0 : logging:: + LogMessageVoidify () & logging:: + LogMessage ("../../base/memory/weak_ptr.h", 0, + logging::LOG_ERROR_REPORT).stream () << ". "; + } T *ptr_; +}; +template < class > class SupportsWeakPtr:internal::SupportsWeakPtrBase { +}; +} +template < class ObserverType > class ObserverListBase:base::SupportsWeakPtr < ObserverListBase < ObserverType > + > { +public: + class Iterator { + public: + Iterator (ObserverListBase & list) :max_index_ (0 ? std::numeric_limits < + size_t >::max () : list.observers_. + size () ) { + } ObserverType * + GetNext () { + ListType & observers = list_->observers_; + if (observers[0]) + ++index_; + } + base::WeakPtr < ObserverListBase > list_; + size_t + index_; + size_t + max_index_; + }; + typedef + std::vector < + ObserverType * > + ListType; + ListType + observers_; +}; +template < class ObserverType, bool > class ObserverList:public ObserverListBase < + ObserverType > { +}; +namespace + ProxyPrefs { +enum ConfigState +{ }; +} +namespace + net { +class + ProxyConfig { +}; +class + ProxyConfigService { +public: + enum ConfigAvailability + { }; + class + Observer { + public: + Observer () { + } virtual void + OnProxyConfigChanged (const ProxyConfig &, ConfigAvailability) = 0; + }; + virtual void + OnLazyPoll () { + } +}; +} +class + ChromeProxyConfigService: + net::ProxyConfigService, + net::ProxyConfigService::Observer { + ConfigAvailability + GetLatestProxyConfig (net::ProxyConfig *); + void + UpdateProxyConfig (ProxyPrefs::ConfigState, const net::ProxyConfig &); + void + OnProxyConfigChanged (const net::ProxyConfig &, ConfigAvailability); + ObserverList < + net::ProxyConfigService::Observer, + 0 > + observers_; +}; +void +ChromeProxyConfigService::UpdateProxyConfig (ProxyPrefs::ConfigState, + const net::ProxyConfig &) { + net::ProxyConfig new_config; + ConfigAvailability availability = GetLatestProxyConfig (0); +net: + ProxyConfigService::Observer * obs; + obs->OnProxyConfigChanged (new_config, availability); +} +void +ChromeProxyConfigService::OnProxyConfigChanged (const net::ProxyConfig &, + ConfigAvailability + availability) { + net::ProxyConfig actual_config; + ObserverListBase < + net::ProxyConfigService::Observer >::Iterator it (observers_); +net: + ProxyConfigService::Observer * obs; + if (it.GetNext () ) + obs->OnProxyConfigChanged (actual_config, availability); +} |