home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: gnu.gcc.bug
- Path: sparky!uunet!cs.utexas.edu!sdd.hp.com!saimiri.primate.wisc.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!cs.berkeley.edu!sethg
- From: sethg@cs.berkeley.edu (Seth C. Goldstein)
- Subject: gcc 2.3.1 bug with pointer to function in c++
- Message-ID: <9211212155.AA20927@boing.CS.Berkeley.EDU>
- Sender: gnulists@ai.mit.edu
- Organization: GNUs Not Usenet
- Distribution: gnu
- Date: Sat, 21 Nov 1992 05:55:58 GMT
- Approved: bug-gcc@prep.ai.mit.edu
- Lines: 202
-
- Machine: sparc
- Version: gcc version 2.3.1
- OS: SunOS Release 4.1.2
- problem: Assertion fails for type definition.
-
- gcc-2.3.1 -DCM5 -gstabs -I. -I/usr/cm5/local/include -I/usr/cm5/include -Dpe_obj -DPE_CODE -o bin-cm5/threads.o -c threads.C
- threads.h: In method `void Portal<int>::put (int)':
- In file included from threads.C:25:
- threads.h:148: warning: type specifier omitted for parameter
- cp-class.c:4011: failed assertion `TREE_CODE (TREE_VALUE (rhs)) == FUNCTION_DECL'
- gcc-2.3.1: Internal compiler error: program cc1plus got fatal signal 6
-
-
- threads.h (upto through 148) is:
-
- /* tab:4
- *
- * threads.h - macros and class definitions for c+f
- *
- * Copyright (c) 1992 by Seth Copen Goldstein and
- * Regents of the University of California
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, provided that the above copyright
- * notice appear in all copies. Copyright holder(s) make no
- * representation about the suitability of this software for
- * any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- * Author: Seth Copen Goldstein
- * Version: 26
- * Creation Date: Thu Nov 19 21:49:42 1992
- * Filename: threads.h
- * History:
- */
-
- #ifndef _THREADS_H_
- #define _THREADS_H_
-
- #include "cm5.h"
-
- #ifdef DEBUG
- extern "C" void doDebugPrint(char *s, ...);
-
- # define trace(x) //printf("%3d: %-20.20s: %x\n", MYPROC, x, this)
- # define debugMsg(x) doDebugPrint x
- #else
- # define trace(x)
- # define debugMsg(x)
- #endif
-
- #define on(x) if (MYPROC == x)
- #define portalFor(p,i) Portal<int> p(this, &i)
- #define forkReturn(v) {result.put(v);return;}
-
- #define suspend(x) \
- if (counter) \
- { \
- restart = x; \
- return; \
- } \
- case x:
-
- #define startFrame() \
- switch (restart) \
- { \
- case 0:
-
- #define endFrame() \
- break; \
- default: \
- printf("entered %x with %d. unknown.\n", this, restart); \
- }
-
- class Frame;
-
- typedef int Codeptr;
- typedef void (Frame::*Codeblock)(void);
-
- class Frame
- {
- protected:
-
- // every function that can suspend inherits from this class and get
- // the next three instance variables.
-
- Codeblock cb;
- Frame *next;
- Codeptr restart;
- int counter; // only one counter per frame for this
- // implemenation
-
- // the ready que and other globals every Frame uses
-
- static Frame *readyQ;
- static volatile int notDone;
- static Frame *currentFrame;
- static Processor nextProcessor;
-
- public:
- inline Frame(void);
- inline Frame(Codeblock function, int count);
- inline Frame(Codeblock function);
-
- inline void incrCount(void);
- inline void post(void);
- inline void run(void);
- inline void enQ(void);
- inline void Frame::forceEnQ(void);
- inline int Frame::isIdle(void);
- inline void Frame::becomeIdle(void);
-
- static Frame * deQ(void);
- static void printQ(void);
- static void terminate(void);
- static void initialize(void);
- };
-
- // How many counters do you really need for a frame?
- // right now, I am going to try for one per frame and see how it
- // works. If this is changed change the portal class.
-
- #define PINLINE
-
- template <class T>
- class Portal
- {
- Frame *frame; // frame that *value resides in
- T *value; // the address that this portal is for
- Processor proc; // the processor that frame resides on
-
- public:
- Portal(){}
- inline Portal(Frame *f, T *v)
- {
- frame = f;
- value = v;
- proc = MYPROC;
- }
-
- inline Portal(Processor p, Frame *f, T *v)
- {
- frame = f;
- value = v;
- proc = p;
- }
-
- inline Frame *getFrame(void) { return frame; }
- inline T *getDest(void) { return value; }
- inline Processor getProc(void) { return proc; }
-
- inline void put(T v)
- {
- trace("put");
- if (proc == MYPROC)
- {
- *value = v;
- frame->post();
- }
- else
- {
- void (*foo)(Frame *, T *, Y) = &RemotePost;
-
- debugMsg(("posting to %d!%x(%x) with %d\n", proc, frame,
- value, v));
- am_rpc3(proc, foo, frame, value, v);
- }
- }
-
- static void remotepost(Frame *f,
- int *adr,
- T v);
- };
-
- // tab:4
- //
- // threads.C - basic runtime sytstem for c+f
- //
- // Copyright (c) 1992 by Seth Copen Goldstein and
- // Regents of the University of California
- //
- // Permission to use, copy, modify, and distribute this
- // software and its documentation for any purpose and without
- // fee is hereby granted, provided that the above copyright
- // notice appear in all copies. Copyright holder(s) make no
- // representation about the suitability of this software for
- // any purpose. It is provided "as is" without express or
- // implied warranty.
- //
- // Author: Seth Copen Goldstein
- // Version: 29
- // Creation Date: Thu Nov 19 21:47:56 1992
- // Filename: threads.C
- // History:
- //
- static char _version_string_[] = "\nVersion:1:threads.C\0\n";
-
- #include <stdio.h>
- #include "threads.h"
- ////////////////////////////////////// EOF
-
-