aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2004-07-22 14:57:09 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2004-07-22 14:57:09 +0000
commit4261159083dfcfea414490c157244ed20529255e (patch)
treefa1afdcf738deb036a74e2c2591c52bebeabefa7
parent4f5492cdfdff0df9d102a03fc3486ba004bf1b44 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/cp/pt.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/template/crash20.C20
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);
+}
+