public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/15745] New: exception specification incorrectly changes the type of the exception thrown
@ 2004-05-31 22:08 wsf at fultondesigns dot co dot uk
2004-05-31 22:26 ` [Bug c++/15745] " pinskia at gcc dot gnu dot org
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: wsf at fultondesigns dot co dot uk @ 2004-05-31 22:08 UTC (permalink / raw)
To: gcc-bugs
$ cat gccexceptionbug.cxx
#include <iostream>
using namespace std;
typedef int IntArray[10];
void test_array() throw (IntArray) {
//void test_array() {
static IntArray arr;
for (int i=0; i<10; i++) {
arr[i] = i;
}
throw arr;
}
int main ()
{
cout << "Start" << endl;
try {
test_array();
} catch (IntArray) {
cout << "Caught!" << endl;
}
cout << "Finish" << endl;
return 0;
}
$ g++-3.4.0 -v -save-temps gccexceptionbug.cxx -o gccexceptionbug
Reading specs from /usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/specs
Configured with: ../configure --prefix=/usr --libdir=/usr/lib
--with-slibdir=/lib --mandir=/usr/share/man --infodir=/usr/share/info
--enable-shared --enable-threads=posix --disable-checking --enable-long-long
--enable-__cxa_atexit --enable-clocale=gnu --disable-libunwind-exceptions
--enable-languages=c,c++,java --program-suffix=-3.4.0
--host=i586-mandrake-linux-gnu --with-system-zlib
Thread model: posix
gcc version 3.4.0 (Mandrake Linux 10.0 3.4.0-1mdk)
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/cc1plus -E -quiet -v -D_GNU_SOURCE
gccexceptionbug.cxx -mtune=pentium -o gccexceptionbug.ii
ignoring nonexistent directory
"/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../../i586-mandrake-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../../include/c++/3.4.0
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../../include/c++/3.4.0/i586-mandrake-linux-gnu
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../../include/c++/3.4.0/backward
/usr/local/include
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/include
/usr/include
End of search list.
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/cc1plus -fpreprocessed
gccexceptionbug.ii -quiet -dumpbase gccexceptionbug.cxx -mtune=pentium -auxbase
gccexceptionbug -version -o gccexceptionbug.s
GNU C++ version 3.4.0 (Mandrake Linux 10.0 3.4.0-1mdk) (i586-mandrake-linux-gnu)
compiled by GNU C version 3.4.0 (Mandrake Linux 10.0 3.4.0-1mdk).
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32000
as -V -Qy -o gccexceptionbug.o gccexceptionbug.s
GNU assembler version 2.14.90.0.5 (i586-mandrake-linux-gnu) using BFD version
2.14.90.0.5 20030722
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/collect2 --eh-frame-hdr -m elf_i386
-dynamic-linker /lib/ld-linux.so.2 -o gccexceptionbug
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../crt1.o
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../crti.o
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/crtbegin.o
-L/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0
-L/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0
-L/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../.. gccexceptionbug.o -lstdc++
-lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/crtend.o
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../crtn.o
$
$ ./gccexceptionbug
Start
terminate called after throwing an instance of 'int*'
Aborted
$
Note that if the exception specification in the definition of test_array() is
removed, the exception is caught. (Replace with the commented out line). The
same behaviour was observed in gcc version 3.3.1 (cygming special).
--
Summary: exception specification incorrectly changes the type of
the exception thrown
Product: gcc
Version: 3.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: wsf at fultondesigns dot co dot uk
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: i586-mandrake-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15745
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/15745] exception specification incorrectly changes the type of the exception thrown
2004-05-31 22:08 [Bug c++/15745] New: " wsf at fultondesigns dot co dot uk
@ 2004-05-31 22:26 ` pinskia at gcc dot gnu dot org
2004-06-01 15:28 ` bangerth at dealii dot org
2004-06-26 20:22 ` pinskia at gcc dot gnu dot org
2 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-05-31 22:26 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-05-31 13:15 -------
If I recall correctly from my reading of the standard arrays get decayed to pointers for things like this
(and a couple of others too).
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15745
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/15745] exception specification incorrectly changes the type of the exception thrown
2004-05-31 22:08 [Bug c++/15745] New: " wsf at fultondesigns dot co dot uk
2004-05-31 22:26 ` [Bug c++/15745] " pinskia at gcc dot gnu dot org
@ 2004-06-01 15:28 ` bangerth at dealii dot org
2004-06-26 20:22 ` pinskia at gcc dot gnu dot org
2 siblings, 0 replies; 6+ messages in thread
From: bangerth at dealii dot org @ 2004-06-01 15:28 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From bangerth at dealii dot org 2004-06-01 15:27 -------
Confirmed. Here's a small testcase:
-------------------
typedef int IntArray[10];
IntArray i;
void test_array()
#ifdef TEST
throw (IntArray)
#endif
{ throw i; }
int main () {
try {
test_array();
} catch (IntArray) {}
}
------------------
We get
g/x> /home/bangerth/bin/gcc-3.4-pre/bin/c++ x.cc ; ./a.out
g/x> /home/bangerth/bin/gcc-3.4-pre/bin/c++ x.cc -DTEST ; ./a.out
terminate called after throwing an instance of 'int*'
Aborted
The point is that if we throw an exception that violates the exception
specification, then it is converted into an unspec exception and we
abort. However, since we can catch the exception that we throw in the
main function if there is no exception specification on the function
body, it seems as if the exception thrown is really of type IntArray
and shouldn't violate the exception specification. I agree that this
is confusing and looks like a bug in gcc associated with decaying
arrays to pointers, though I'd like to solicit a second opinion on
this.
We get the same results for all gcc versions from 2.95 to mainline.
W.
--
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |wrong-code
Known to fail| |2.95.3 3.3.1 3.0.4 3.4.0
| |3.5.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15745
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/15745] exception specification incorrectly changes the type of the exception thrown
2004-05-31 22:08 [Bug c++/15745] New: " wsf at fultondesigns dot co dot uk
2004-05-31 22:26 ` [Bug c++/15745] " pinskia at gcc dot gnu dot org
2004-06-01 15:28 ` bangerth at dealii dot org
@ 2004-06-26 20:22 ` pinskia at gcc dot gnu dot org
2 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-06-26 20:22 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-06-26 20:22 -------
Confirmed.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Last reconfirmed|0000-00-00 00:00:00 |2004-06-26 20:22:14
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15745
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-11-18 18:52 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <bug-15745-8173@http.gcc.gnu.org/bugzilla/>
2007-09-06 3:34 ` [Bug c++/15745] exception specification incorrectly changes the type of the exception thrown jason at gcc dot gnu dot org
2007-10-01 20:53 ` jason at gcc dot gnu dot org
2008-11-18 18:52 ` jason at gcc dot gnu dot org
2004-05-31 22:08 [Bug c++/15745] New: " wsf at fultondesigns dot co dot uk
2004-05-31 22:26 ` [Bug c++/15745] " pinskia at gcc dot gnu dot org
2004-06-01 15:28 ` bangerth at dealii dot org
2004-06-26 20:22 ` pinskia at gcc dot gnu dot org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).