From 4261159083dfcfea414490c157244ed20529255e Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 22 Jul 2004 14:57:09 +0000 Subject: [PATCH] * pt.c cp: * pt.c (get_template_base): Check type is completable. testsuite: * g++.dg/template/crash20.c: New. From-SVN: r85050 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/pt.c | 4 ++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/template/crash20.C | 20 ++++++++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/crash20.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 080de524c4f..ce91f8965ed 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2004-07-22 Nathan Sidwell + + * pt.c (get_template_base): Check type is completable. + 2004-07-21 Eric Christopher * decl.c (poplevel): Inline unused variable checking. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b30bd5772b8..ca84b394423 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 871b1560d6a..9e20ccc21b4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-07-22 Nathan Sidwell + + * 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 00000000000..0492b72e35e --- /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 + +// ICE with incompletable type. + +class INC; + +template class B {}; + +template void Foo (B &); + +void Foo (INC &); + +void Baz (INC *p) +{ + Foo (*p); +} + -- 2.30.2