// { dg-do assemble  }
// GROUPS passed operators
// opr-new file
// From: flisakow@cae.wisc.edu
// Date:     Thu, 1 Sep 94 18:21:09 CDT
// Subject:  g++ bug?
// Message-ID: <9409012321.AA05346@hprisc-19.cae.wisc.edu>

#include <stdio.h>


struct fcell {
        FILE *fd;
        struct fcell *next;
};


class FStack {
public:
        struct fcell *top;
        FStack() { top = NULL ; } ;
        inline void push(FILE * fd1, int line_num, char *fname = NULL) {
                struct fcell *tmp = new struct fcell;
                tmp->fd = fd1;
                tmp->next = top;
                top = tmp ;
        }
};
