This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/11893] New: stdcall pointers to member-functions handled wrong
- From: "boaz at hishome dot net" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 12 Aug 2003 11:14:13 -0000
- Subject: [Bug c++/11893] New: stdcall pointers to member-functions handled wrong
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11893
Summary: stdcall pointers to member-functions handled wrong
Product: gcc
Version: 3.2.2
Status: UNCONFIRMED
Severity: critical
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: boaz at hishome dot net
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: i386-pc-linux
the compiler will not let me declare an __stdcall__ pointer to function member
and code will than SEGFAULT on invocation of the member pointer. This is not
the case for Regular pointers to functions. ( The compiler will also issue a
warning on mismatch.)
Listing of the Error: (BAD)
class AFoo
{
public:
__attribute__((__stdcall__))
void foo(int i ,int ii ,int iii) ;
} ;
__attribute__((__stdcall__))
void AFoo::foo(int i ,int ii ,int iii)
{
return ;
}
int main()
{
AFoo afoo ;
void ( AFoo::*func)(int,int,int) ;
func = &AFoo::foo ;
for(int i=0 ; i < 0x8000000 ;i++)
(afoo.*func)(1,2,3) ; // SEGFAULT or SEGIL when stack is Exhausted
return 0 ;
}
any attempt to place the __atribute__((stdcall)) in the pointer declaration
causes a compilation error. With out it the code will SEGFAULT.
If declaring a regular pointer to function than no compilation error is issued
and all is well.
Listing of Regular function pointer: (GOOD)
void __attribute__((stdcall)) foo(int i ,int ii ,int iii)
{
}
int main()
{
void ( __attribute__((stdcall)) *func)(int,int,int) = &foo ;
for(int i=0 ; i < 0x8000000 ;i++)
(func)(1,2,3) ;
return 0 ;
}
removing the __attribute__((stdcall)) from the *func declaration will rightfully
issue a warning ( should be an error if you ask me, type mismatch).
But Not so on our first example.