🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Tom Vijlbrief Thu, 29 Jun 1989 07:59
-finline-functions crashes G++1.35
#83
Author: Tom Vijlbrief
Date: Thu, 29 Jun 1989 07:59
175 lines
4971 bytes
Sun 3:
======================
g++ -c bug.c -finline-functions -v
g++ version 1.35.0
 /usr/local/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 bug.c /tmp/cca08505.cpp
GNU CPP version 1.35
 /usr/local/lib/gcc-cc1plus /tmp/cca08505.cpp -quiet -dumpbase bug.c -finline-functions -noreg -version -o /tmp/cca08505.s
GNU C++ version 1.35.0 (68k, MIT syntax) compiled by GNU C version 1.35.
In function void DefaultErrorHandler (int, enum bool, char *, char *):
bug.c:62: warning: implicit declaration of function `Abort'
In function void Error (char *, char *, ...):
bug.c:92: Segmentation violation
========Bug.c:============================
#include <stream.h>
#include <stdarg.h>


#ifndef Error_First
#define Error_First


static const int cWarning  =   0,
	  cError    =   1000,
	  cSysError =   2000,
	  cFatal    =   3000;
	  
typedef void (*ErrorHandlerFunc)(int level, bool abort, char *location, char *msg);
 
extern void ErrorHandler(int level, char *location, va_list va);
extern void Error(char *location, char *msgfmt, ...);
extern void SysError(char *location, char *msgfmt, ...);
extern void Warning(char *location, char *msgfmt, ...);
extern void Fatal(char *location, char *msgfmt, ...);
extern void AbstractMethod(char*);

extern void DefaultErrorHandler(int level, bool abort, char *location, char *msg);

ErrorHandlerFunc SetErrorHandler(ErrorHandlerFunc newhandler);
ErrorHandlerFunc GetErrorHandler();
int SetAbortLevel(int newlevel);
int GetAbortLevel();
int SetIgnoreLevel(int newlevel);
int GetIgnoreLevel();

extern void _exit(int code);

#endif Error_First
int gDebug= 0;

void AbstractMethod(char *s)
{
    Warning(s, "abstract method called");
}

static int abortlevel= cSysError;
static int ignorelevel= cError;

void DefaultErrorHandler(int level, bool abort, char *location, char *msg)
{
    char *type= "Warning";
    if (level < ignorelevel)
	return;
    if (level >= cFatal)
	type= "Fatal";
    else if (level >= cSysError)
	type= "SysError";
    else if (level >= cError)
	type= "Error";
	  
    fprintf(stderr, "%s in <%s>: %s\n", type, location, msg);
    fflush(stderr);
    if (abort) {
	fprintf(stderr, "aborting\n");
	fflush(stderr);
	Abort();
    }
}

static ErrorHandlerFunc errorhandler= DefaultErrorHandler;

void ErrorHandler(int level, char *location, va_list ap)
{
    char buf[1024], *syserror= 0, buf3[1024], *bp;
    
    char *fmt= va_arg(ap, char*);
    vsprintf(buf, fmt, ap);
    if (level >= cSysError && level < cFatal) {
	if (errno < 0 || errno >= sys_nerr)
	    syserror= form("errno out of range %d", errno);
	else
	    syserror= sys_errlist[errno];
    }
    if (syserror) {
	sprintf(buf3, "%s (%s)", buf, syserror);
	bp= buf3;
    } else
	bp= buf;
    errorhandler(level, level >= abortlevel, location, bp);
}

void Error(char *location, char*, ...)
{
    va_list ap;
    va_start(ap, location);
    ErrorHandler(cError, location, ap);
    va_end(ap);
}

void SysError(char *location,  char*, ...)
{
    va_list ap;
    va_start(ap, location);
    ErrorHandler(cSysError, location, ap);
    va_end(ap);
}

void Warning(char *location, char*, ...)
{
    va_list ap;
    va_start(ap, location);
    ErrorHandler(cWarning, location, ap);
    va_end(ap);
}

void Fatal(char *location, char*, ...)
{
    va_list ap;
    va_start(ap, location);
    ErrorHandler(cFatal, location, ap);
    va_end(ap);
}
 
ErrorHandlerFunc SetErrorHandler(ErrorHandlerFunc newhandler)
{
    ErrorHandlerFunc oldhandler= errorhandler;
    errorhandler= newhandler;
    return oldhandler;
}

ErrorHandlerFunc GetErrorHandler()
{
    return errorhandler;
}

int SetAbortLevel(int newlevel)
{
    int oldlevel= abortlevel;
    abortlevel= newlevel;
    return oldlevel;
}

int GetAbortLevel()
{
    return abortlevel;
}

int SetIgnoreLevel(int newlevel)
{
    int oldlevel= abortlevel;
    ignorelevel= newlevel;
    return oldlevel;
}

int GetIgnoreLevel()
{
    return ignorelevel; 
}
========================
===============================================================================
Tom Vijlbrief
TNO Institute for Perception
P.O. Box 23				Phone: +31 34 63 562 11
3769 ZG  Soesterberg			E-mail: tnosoes!tom@mcvax.cwi.nl
The Netherlands				    or:	uunet!mcvax!tnosoes!tom
===============================================================================
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads