diff options
author | Mark Mitchell <mark@markmitchell.com> | 1998-12-22 10:33:17 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1998-12-22 10:33:17 +0000 |
commit | 193306f7fd78865e114ff26f24a9df7b143e95d3 (patch) | |
tree | 0c8fc83b6aadea1bf733e54f4d68791a1998905b /gcc | |
parent | 2f0d2c99e207a5c2ee1f8f1c02b5c60ede28afe9 (diff) | |
download | gcc-193306f7fd78865e114ff26f24a9df7b143e95d3.zip gcc-193306f7fd78865e114ff26f24a9df7b143e95d3.tar.gz gcc-193306f7fd78865e114ff26f24a9df7b143e95d3.tar.bz2 |
cp-tree.h (TYPE_RAISES_EXCEPTIONS): Improve documentation.
1998-12-22 Mark Mitchell <mark@markmitchell.com>
* cp-tree.h (TYPE_RAISES_EXCEPTIONS): Improve documentation.
* tree.c (build_exception_variant): Don't crash on empty throw
specs.
From-SVN: r24394
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 4 | ||||
-rw-r--r-- | gcc/cp/tree.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.eh/spec5.C | 3 |
4 files changed, 15 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ca7bc01..e4b724c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +1998-12-22 Mark Mitchell <mark@markmitchell.com> + + * cp-tree.h (TYPE_RAISES_EXCEPTIONS): Improve documentation. + * tree.c (build_exception_variant): Don't crash on empty throw + specs. + 1998-12-18 DJ Delorie <dj@cygnus.com> * cvt.c (convert_to_reference): Check for both error_mark_node diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index cb55b06..f4399e7 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -1143,7 +1143,9 @@ struct lang_type #define TREE_PARMLIST(NODE) ((NODE)->common.unsigned_flag) /* overloaded! */ /* For FUNCTION_TYPE or METHOD_TYPE, a list of the exceptions that - this type can raise. */ + this type can raise. Each TREE_VALUE is a _TYPE. The TREE_VALUE + will be NULL_TREE to indicate a throw specification of `(...)', or, + equivalently, no throw specification. */ #define TYPE_RAISES_EXCEPTIONS(NODE) TYPE_NONCOPIED_PARTS (NODE) /* The binding level associated with the namespace. */ diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 8bb750a..8777a11 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1476,7 +1476,9 @@ build_exception_variant (type, raises) for (t = TYPE_RAISES_EXCEPTIONS (v), u = raises; t != NULL_TREE && u != NULL_TREE; t = TREE_CHAIN (t), u = TREE_CHAIN (v)) - if (!same_type_p (TREE_VALUE (t), TREE_VALUE (u))) + if (((TREE_VALUE (t) != NULL_TREE) + != (TREE_VALUE (u) != NULL_TREE)) + || !same_type_p (TREE_VALUE (t), TREE_VALUE (u))) break; if (!t && !u) diff --git a/gcc/testsuite/g++.old-deja/g++.eh/spec5.C b/gcc/testsuite/g++.old-deja/g++.eh/spec5.C new file mode 100644 index 0000000..56154f9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.eh/spec5.C @@ -0,0 +1,3 @@ +// Build don't link: + +extern void *f(unsigned int k) throw(); |