// { dg-do assemble }
// { dg-xfail-if "" { sparc64-*-elf } }
// { dg-options "-g" }
// GROUPS passed old-abort
extern "C" { typedef int jmp_buf[12]; }

enum Error { NO_ERROR };
class ErrorHandler
{
    ErrorHandler *previous;
    static ErrorHandler *error_stack;
    jmp_buf error_buffer;
protected:
    static void pop()
    {
	error_stack = error_stack->previous;
    }
public:
    jmp_buf *push()
    {
	previous = error_stack;
	error_stack = this;
	return &error_buffer;
    }
};
