Path: utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!accelerator.eng.ohio-state.edu!baloo.eng.ohio-state.edu!rob From: rob@baloo.eng.ohio-state.edu (Rob Carriere) Newsgroups: comp.sys.atari.st Subject: MWC v3.0: Bug and solution Summary: pointers to fn's returning float don't work, ditto double do Keywords: bug, solution, pointer-to-fn-returning-float Message-ID: <470@accelerator.eng.ohio-state.edu> Date: 14 Aug 88 22:44:50 GMT Sender: news@accelerator.eng.ohio-state.edu Reply-To: rob@baloo.eng.ohio-state.edu (Rob Carriere) Organization: Ohio State Univ, College of Engineering Lines: 43 The following program breaks the MWC C compiler (v3.0, I don't know about others): ------- try.c ----- float foo( bar ) float (*bar)(); { return (*bar)(3.0); /* breaks here */ } float sqr( sink ) float sink; { return sink*sink; } main() { printf( "%g\n", foo( sqr )); exit(0); } ------- end of try.c --- Compile this with cc -f try.c to get an ``internal compiler error'' referring to the line commented with ``breaks here''. I called MWC tech support, and they told that they knew of the problem and were working on it, but for the time being there was a very simple solution: change the declaration for bar to double (*bar)(); and it will work. Making the appropriate changes indeed causes the program to compile and link without errors; when run, it gives the correct output (9.00000), and terminates normally. BTW: tech support from MWC was very good: I was talking to the right guy in under 30 seconds, and he was polite, helpful, to the point, and knew what he was doing. They left a good impression there. Rob Carriere