c++/2282: faulty argument signature matching for catch()

mayer@tux.org mayer@tux.org
Tue Mar 13 17:36:00 GMT 2001


>Number:         2282
>Category:       c++
>Synopsis:       faulty argument signature matching for catch()
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Tue Mar 13 17:36:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Uwe F. Mayer
>Release:        2.97 20010205 (experimental)
>Organization:
tux.org
>Environment:
System: Linux tosca.localnet. 2.2.18 #2 Thu Mar 8 13:48:25 PST 2001 i686 unknown
Architecture: i686
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc-20010205/configure --prefix=/usr/local/gcc -disable-nls
>Description:
In a try-catch sequence, if an error of type "const char *" is thrown,
it is not caught by a catch waiting for "char *", even as it should be
according to standard argument matching. Notice that g++ of course gets
this argument matching correct for ordinary functions.
>How-To-Repeat:
Running "g++ bug4.cc; a.out" prints on my system:
      char *: Hello
Aborted
It should have printed:
      char *: Hello
      char *: error message

File bug4.cc:
-------------

#include<stdio.h>

// void say_it(const char * s){
//     printf("const char *: %s\n",s);
// }

void say_it(char * s){
  printf("      char *: %s\n",s);
}

int main()
{
  say_it("Hello");
  try {
    throw ("error message");
  }
  catch (char * s){
    printf("      char *: %s\n",s);
  }
  // catch (const char * s){
  //   printf("const char *: %s\n",s);
  // }
}

File bug4.ii.gz (uuencoded):
----------------------------

begin 600 bug4.ii.gz
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
$3D4`````
`
end

>Fix:
Write a catch block for the case "const char *" as well.

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list