diff options
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash20.C | 20 |
4 files changed, 32 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 080de52..ce91f89 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2004-07-22 Nathan Sidwell <nathan@codesourcery.com> + + * pt.c (get_template_base): Check type is completable. + 2004-07-21 Eric Christopher <echristo@redhat.com> * decl.c (poplevel): Inline unused variable checking. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b30bd57..ca84b39 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -9458,6 +9458,10 @@ get_template_base (tree tparms, tree targs, tree parm, tree arg) my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92); arg_binfo = TYPE_BINFO (complete_type (arg)); + if (!arg_binfo) + /* The type could not be completed. */ + return NULL_TREE; + rval = get_template_base_recursive (tparms, targs, parm, arg_binfo, NULL_TREE, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 871b156..9e20ccc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-07-22 Nathan Sidwell <nathan@codesourcery.com> + + * g++.dg/template/crash20.c: New. + 2004-07-22 David Billinghurst (David.Billinghurst@riotinto.com) * gfortran.dg/g77/970625-2.f Copy from g77.f-torture/execute. diff --git a/gcc/testsuite/g++.dg/template/crash20.C b/gcc/testsuite/g++.dg/template/crash20.C new file mode 100644 index 0000000..0492b72 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/crash20.C @@ -0,0 +1,20 @@ +// { dg-do compile } + +// Copyright (C) 2004 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 22 Jul 2004 <nathan@codesourcery.com> + +// ICE with incompletable type. + +class INC; + +template <typename T> class B {}; + +template<typename T> void Foo (B<T> &); + +void Foo (INC &); + +void Baz (INC *p) +{ + Foo (*p); +} + |