diff options
author | Martin Jambor <mjambor@suse.cz> | 2013-09-12 14:15:15 +0200 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2013-09-12 14:15:15 +0200 |
commit | 33605886ff20aeffb08529e2d571fff5483e650e (patch) | |
tree | ee768e7fd9f9f6f21f409bff6af8d1d848dda454 | |
parent | 97463b2b878556e244a9aadad64228f9895ac735 (diff) | |
download | gcc-33605886ff20aeffb08529e2d571fff5483e650e.zip gcc-33605886ff20aeffb08529e2d571fff5483e650e.tar.gz gcc-33605886ff20aeffb08529e2d571fff5483e650e.tar.bz2 |
re PR ipa/58371 (internal compiler error: in ipcp_verify_propagated_values, at ipa-cp.c:892)
2013-09-12 Martin Jambor <mjambor@suse.cz>
PR ipa/58371
* g++.dg/ipa/pr58371.C: New test.
From-SVN: r202522
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ipa/pr58371.C | 204 |
2 files changed, 209 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index da3f08d..576d56d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-09-12 Martin Jambor <mjambor@suse.cz> + + PR ipa/58371 + * g++.dg/ipa/pr58371.C: New test. + 2013-09-12 Richard Biener <rguenther@suse.de> * gcc.dg/tree-ssa/ldist-4.c: Remove undefined behavior. Adjust diff --git a/gcc/testsuite/g++.dg/ipa/pr58371.C b/gcc/testsuite/g++.dg/ipa/pr58371.C new file mode 100644 index 0000000..00cfbb8 --- /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); +} |