rfg@MCC.COM (Ron Guilmette) (04/13/89)
It seems that G++ 1.34.1 may not always correctly disambiguate method references when the & (address-of) operator is used. It looks like this can result in incorrect code generation as demonstrated below. What follows is a short example source file followed by the code generated for it (on a Sun3) by G++ 1.34.1. It appears that the code generated for the final assignment to "vp" within the function called "test" is incorrect. -------------------------------------------------------------------- // Check that it is legal to take the address of an overloaded // operator as long as the context of the & operator requires // that a specific (unambigous) type of pointer-to-function // with arguments be yielded by the &. // #include "Testinc.h" overload function; void function (char c) { c = c; } void function (float f) { f = f; } class base { public: void method (char); void method (float); }; void* vp; typedef void (*ptr_to_func_of_char)(char); typedef void (*ptr_to_func_of_float)(float); typedef void (base::*ptr_to_method_of_char)(char); typedef void (base::*ptr_to_method_of_float)(float); int test () { vp = (ptr_to_func_of_char) &function; vp = (ptr_to_func_of_float) &function; vp = (ptr_to_method_of_char) &base::method; vp = (ptr_to_method_of_float) &base::method; // bad code? return 0; } void base::method (char c) { c = c; } void base::method (float f) { f = f; } ---------------------------------------------------------------------- #NO_APP gcc_compiled.: .text .even .globl _function_QI _function_QI: link a6,#0 moveb a6@(11),a6@(11) L1: unlk a6 rts .even .globl _function_SF _function_SF: link a6,#0 L2: unlk a6 rts .even .globl _test _test: link a6,#0 movel #_function_QI,_vp movel #_function_SF,_vp movel #_method_PSbase_QI,_vp movel #_method_PSbase_QI,_vp ; should be #_method_PSbase_SF clrl d1 movel d1,d0 jra L3 L3: unlk a6 rts .even .globl _method_PSbase_QI _method_PSbase_QI: link a6,#0 moveb a6@(15),a6@(15) L4: unlk a6 rts .even .globl _method_PSbase_SF _method_PSbase_SF: link a6,#0 L5: unlk a6 rts .comm _vp,4 ---------------------------------------------------------------------------- // Ron Guilmette - MCC - Experimental Systems Kit Project // 3500 West Balcones Center Drive, Austin, TX 78759 - (512)338-3740 // ARPA: rfg@mcc.com // UUCP: {rutgers,uunet,gatech,ames,pyramid}!cs.utexas.edu!pp!rfg