diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2004-07-22 14:57:09 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2004-07-22 14:57:09 +0000 |
commit | 4261159083dfcfea414490c157244ed20529255e (patch) | |
tree | fa1afdcf738deb036a74e2c2591c52bebeabefa7 | |
parent | 4f5492cdfdff0df9d102a03fc3486ba004bf1b44 (diff) | |
download | gcc-4261159083dfcfea414490c157244ed20529255e.zip gcc-4261159083dfcfea414490c157244ed20529255e.tar.gz gcc-4261159083dfcfea414490c157244ed20529255e.tar.bz2 |
* pt.c
cp:
* pt.c (get_template_base): Check type is completable.
testsuite:
* g++.dg/template/crash20.c: New.
From-SVN: r85050
-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); +} + |