mirror of git://gcc.gnu.org/git/gcc.git
re PR c++/12932 (ICE with use of ptr-to-function as template arg)
PR c++/12932 * class.c (currently_open_derived_class): Check if current_class_type is NULL_TREE. * semantics.c (finish_call_expr): Check if currently_open_derived_class returns NULL_TREE. * cp-tree.h (DERIVED_FROM_P): Add parenthesis around PARENT parameter. * g++.dg/template/static5.C: New test. From-SVN: r73705
This commit is contained in:
parent
df964a183f
commit
c44e68a5f7
|
@ -1,3 +1,13 @@
|
||||||
|
2003-11-18 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
|
||||||
|
|
||||||
|
PR c++/12932
|
||||||
|
* class.c (currently_open_derived_class): Check if
|
||||||
|
current_class_type is NULL_TREE.
|
||||||
|
* semantics.c (finish_call_expr): Check if
|
||||||
|
currently_open_derived_class returns NULL_TREE.
|
||||||
|
* cp-tree.h (DERIVED_FROM_P): Add parenthesis around PARENT
|
||||||
|
parameter.
|
||||||
|
|
||||||
2003-11-17 Jason Merrill <jason@redhat.com>
|
2003-11-17 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
* init.c (build_new_1): Preevaluate placement args.
|
* init.c (build_new_1): Preevaluate placement args.
|
||||||
|
|
|
@ -5585,6 +5585,9 @@ currently_open_derived_class (tree t)
|
||||||
if (dependent_type_p (t))
|
if (dependent_type_p (t))
|
||||||
return NULL_TREE;
|
return NULL_TREE;
|
||||||
|
|
||||||
|
if (!current_class_type)
|
||||||
|
return NULL_TREE;
|
||||||
|
|
||||||
if (DERIVED_FROM_P (t, current_class_type))
|
if (DERIVED_FROM_P (t, current_class_type))
|
||||||
return current_class_type;
|
return current_class_type;
|
||||||
|
|
||||||
|
|
|
@ -1000,7 +1000,7 @@ enum languages { lang_c, lang_cplusplus, lang_java };
|
||||||
/* Nonzero iff TYPE is derived from PARENT. Ignores accessibility and
|
/* Nonzero iff TYPE is derived from PARENT. Ignores accessibility and
|
||||||
ambiguity issues. */
|
ambiguity issues. */
|
||||||
#define DERIVED_FROM_P(PARENT, TYPE) \
|
#define DERIVED_FROM_P(PARENT, TYPE) \
|
||||||
(lookup_base ((TYPE), PARENT, ba_any, NULL) != NULL_TREE)
|
(lookup_base ((TYPE), (PARENT), ba_any, NULL) != NULL_TREE)
|
||||||
/* Nonzero iff TYPE is uniquely derived from PARENT. Ignores
|
/* Nonzero iff TYPE is uniquely derived from PARENT. Ignores
|
||||||
accessibility. */
|
accessibility. */
|
||||||
#define UNIQUELY_DERIVED_FROM_P(PARENT, TYPE) \
|
#define UNIQUELY_DERIVED_FROM_P(PARENT, TYPE) \
|
||||||
|
|
|
@ -1638,6 +1638,8 @@ finish_call_expr (tree fn, tree args, bool disallow_virtual, bool koenig_p)
|
||||||
if (DECL_FUNCTION_MEMBER_P (f))
|
if (DECL_FUNCTION_MEMBER_P (f))
|
||||||
{
|
{
|
||||||
tree type = currently_open_derived_class (DECL_CONTEXT (f));
|
tree type = currently_open_derived_class (DECL_CONTEXT (f));
|
||||||
|
if (!type)
|
||||||
|
type = DECL_CONTEXT (f);
|
||||||
fn = build_baselink (TYPE_BINFO (type),
|
fn = build_baselink (TYPE_BINFO (type),
|
||||||
TYPE_BINFO (type),
|
TYPE_BINFO (type),
|
||||||
fn, /*optype=*/NULL_TREE);
|
fn, /*optype=*/NULL_TREE);
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2003-11-18 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
|
||||||
|
|
||||||
|
PR c++/12932
|
||||||
|
* g++.dg/template/static5.C: New test.
|
||||||
|
|
||||||
2003-11-18 Joseph S. Myers <jsm@polyomino.org.uk>
|
2003-11-18 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||||
|
|
||||||
* gcc.dg/nested-func-1.c: New test.
|
* gcc.dg/nested-func-1.c: New test.
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
// Origin: Mirek Fidler <cxl@ntllib.org>
|
||||||
|
// Wolfgang Bangerth <bangerth@ticam.utexas.edu>
|
||||||
|
|
||||||
|
// PR c++/12932: ICE address of static function as template argument
|
||||||
|
|
||||||
|
struct Test {
|
||||||
|
static void fun();
|
||||||
|
};
|
||||||
|
|
||||||
|
template <void (*fun)()>
|
||||||
|
void foo () { (*fun)(); }
|
||||||
|
|
||||||
|
|
||||||
|
template
|
||||||
|
void foo<Test::fun> ();
|
Loading…
Reference in New Issue