From: Jason Merrill Date: Wed, 16 Nov 2005 20:22:00 +0000 (-0500) Subject: re PR c++/24580 (virtual base class cause exception not to be caught) X-Git-Tag: releases/gcc-4.1.0~749 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6276e725b276838be6383f941bec392e182d63b0;p=thirdparty%2Fgcc.git re PR c++/24580 (virtual base class cause exception not to be caught) PR c++/24580 * method.c (locate_copy): Also use skip_artificial_parms here. (synthesize_exception_spec): Use CLASS_TYPE_P rather than checking for RECORD_TYPE. (locate_ctor): Abort if we fail to find a default constructor. From-SVN: r107097 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6d354d9d1646..378c324909b7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2005-11-15 Jason Merrill + + PR c++/24580 + * method.c (locate_copy): Also use skip_artificial_parms here. + (synthesize_exception_spec): Use CLASS_TYPE_P rather than checking + for RECORD_TYPE. + (locate_ctor): Abort if we fail to find a default constructor. + 2005-11-15 Mike Stump * name-lookup.c (lookup_name_two): Add. diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 82f4a363cc2d..f3c86d3178db 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -847,7 +847,7 @@ synthesize_exception_spec (tree type, tree (*extractor) (tree, void*), continue; while (TREE_CODE (type) == ARRAY_TYPE) type = TREE_TYPE (type); - if (TREE_CODE (type) != RECORD_TYPE) + if (!CLASS_TYPE_P (type)) continue; fn = (*extractor) (type, client); @@ -894,7 +894,7 @@ locate_ctor (tree type, void *client ATTRIBUTE_UNUSED) if (sufficient_parms_p (parms)) return fn; } - return NULL_TREE; + gcc_unreachable (); } struct copy_data @@ -941,7 +941,7 @@ locate_copy (tree type, void *client_) int excess; int quals; - parms = TREE_CHAIN (parms); + parms = skip_artificial_parms_for (fn, parms); if (!parms) continue; src_type = non_reference (TREE_VALUE (parms));