diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/p15561.C b/gcc/testsuite/g++.old-deja/g++.benjamin/p15561.C new file mode 100644 index 0000000000000000000000000000000000000000..3dedd0c5bade0ba38e093e3efe2d4611eb315704 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.benjamin/p15561.C @@ -0,0 +1,194 @@ +//980418 bkoz reduced from kumar's g++/15561 +// Build don't link: +// prms-id: 15561 + +extern int errno; +extern int write (int, const void *, long unsigned int ) ; + +/* to debug +#ifdef BUG +*/ +//this crashes +typedef long unsigned int size_t; +//typedef unsigned long size_t; +//this is ok +//typedef unsigned int size_t; + +class exception { +public: + exception () { } + virtual ~exception () { } + virtual const char* what () const; +}; + +class bad_alloc : public exception { +public: + virtual const char* what() const throw() { return "bad_alloc"; } +}; + +struct nothrow_t {}; +extern const nothrow_t nothrow; + +typedef void (*new_handler)(); +new_handler set_new_handler (new_handler); + +void *operator new (size_t) throw (std::bad_alloc); +void *operator new[] (size_t) throw (std::bad_alloc); +void operator delete (void *) throw(); +void operator delete[] (void *) throw(); +void *operator new (size_t, const nothrow_t&) throw(); +void *operator new[] (size_t, const nothrow_t&) throw(); +void operator delete (void *, const nothrow_t&) throw(); +void operator delete[] (void *, const nothrow_t&) throw(); +inline void *operator new(size_t, void *place) throw() { return place; } +inline void *operator new[](size_t, void *place) throw() { return place; } + +/* to debug +#else +#include <new> +#endif +*/ + +//from kumar's ace file +typedef unsigned long u_long; +typedef int ACE_thread_t; +typedef int ACE_hthread_t; +typedef int ACE_thread_key_t; +typedef int ssize_t; +typedef int ACE_HANDLE; +typedef ACE_HANDLE ACE_SOCKET; + +struct ACE_OVERLAPPED +{ + u_long Internal; + u_long InternalHigh; + u_long Offset; + u_long OffsetHigh; + ACE_HANDLE hEvent; +}; + +struct strbuf { + int maxlen; + int len; + char *buf; +}; + +struct flock { + short l_type; + short l_whence; + long l_start; + long l_len; + short l_pid; + short l_xxx; +}; + +class ACE_OS +{ +public: + struct ace_flock_t + { + void dump (void) const; + struct flock lock_; + ACE_HANDLE handle_; + }; + static ssize_t write (ACE_HANDLE handle, + const void *buf, + size_t nbyte); + static ssize_t write (ACE_HANDLE handle, + const void *buf, + size_t nbyte, + ACE_OVERLAPPED *); + + static void *memcpy (void *t, + const void *s, + size_t len); + + static int putmsg (ACE_HANDLE handle, + const struct strbuf *ctl, + const struct strbuf *data, + int flags); + + static ACE_thread_t NULL_thread; + static ACE_hthread_t NULL_hthread; + static ACE_thread_key_t NULL_key; + static void mutex_lock_cleanup (void *mutex); +private: + ACE_OS (void); +}; + + + +inline ssize_t +ACE_OS::write (ACE_HANDLE handle, const void *buf, size_t nbyte) +{ + do { + ssize_t ace_result_ = -1 ; + ace_result_ = ace_result_; + return ::write (handle, buf, nbyte) ; } while (0) ; +} + +inline ssize_t +ACE_OS::write (ACE_HANDLE handle, const void *buf, size_t nbyte, + ACE_OVERLAPPED *overlapped) +{ + overlapped = overlapped; + return ACE_OS::write (handle, buf, nbyte); +} + + +inline int +ACE_OS::putmsg (ACE_HANDLE handle, const struct strbuf *ctl, + const struct strbuf *data, int flags) +{ + { + if (& flags ) + ; + } ; + if (ctl == 0 && data == 0) + { + errno = 22 ; + return 0; + } + + else if (ctl != 0) + return ACE_OS::write (handle, ctl->buf, ctl->len); + else if (data != 0) + return ACE_OS::write (handle, data->buf, data->len); + else + { + char *buf; + do + { + buf = new char [ctl->len + data->len] ; + if ( buf == 0) + { + errno = 12 ; + return -1 ; + } + } + while (0) ; + ACE_OS::memcpy (buf, ctl->buf, ctl->len); + ACE_OS::memcpy (buf + ctl->len, data->buf, data->len); + int result = ACE_OS::write (handle, buf, ctl->len + data->len); + delete [] buf; + return result; + } +} + +int main() +{ + return (1); +} + + + + + + + + + + + + +