From 2ef6c975b9345f745e7d21a2cbbabdc8de9acbee Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Mon, 24 Mar 2003 18:20:12 +0000 Subject: [PATCH] re PR c++/10026 (ICE on incomplete type) cp: PR c++/10026 * decl2.c (arg_assoc_type) [ERROR_MARK]: Don't die. testsuite: PR c++/10026 * g++.dg/lookup/koenig1.C: New test. PR C++/10199 * g++.dg/lookup/template2.C: New test. From-SVN: r64809 --- gcc/cp/ChangeLog | 16 +++++++++---- gcc/cp/decl2.c | 2 ++ gcc/testsuite/ChangeLog | 8 +++++++ gcc/testsuite/g++.dg/lookup/koenig1.C | 13 +++++++++++ gcc/testsuite/g++.dg/lookup/template2.C | 31 +++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/g++.dg/lookup/koenig1.C create mode 100644 gcc/testsuite/g++.dg/lookup/template2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 68c17169265..5ffb1440a5f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,7 +1,13 @@ +2003-03-24 Nathan Sidwell + + PR c++/10026 + * decl2.c (arg_assoc_type) [ERROR_MARK]: Don't die. + 2003-03-23 Mark Mitchell PR c++/7086 - * typeck.c (cxx_mark_addressable): Likewise. + * typeck.c (cxx_mark_addressable): Adjust call to + gen_mem_addressof or put_var_into_stack. 2003-03-22 Nathan Sidwell @@ -647,10 +653,10 @@ 2003-02-26 Devang Patel - * decl.c (finish_enum): Merge two 'for' loops. Copy value node if required. - Postpone enum setting for template decls. - (build_enumerator): Delay copying value node until finish_enum (). Remove - #if 0'ed code. + * decl.c (finish_enum): Merge two 'for' loops. Copy value node if + required. Postpone enum setting for template decls. + (build_enumerator): Delay copying value node until finish_enum + (). Remove #if 0'ed code. * pt.c (tsubst_enum): Set TREE_TYPE and copy value node. (tsubst_copy): Add check for enum type. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 751d0f6534f..9f5e27eec90 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -3986,6 +3986,8 @@ arg_assoc_type (struct arg_lookup *k, tree type) { switch (TREE_CODE (type)) { + case ERROR_MARK: + return false; case VOID_TYPE: case INTEGER_TYPE: case REAL_TYPE: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 25027a949ac..a402ba06193 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2003-03-24 Nathan Sidwell + + PR c++/10026 + * g++.dg/lookup/koenig1.C: New test. + + PR C++/10199 + * g++.dg/lookup/template2.C: New test. + 2003-03-24 Jakub Jelinek * g++.dg/opt/rtti1.C: New test. diff --git a/gcc/testsuite/g++.dg/lookup/koenig1.C b/gcc/testsuite/g++.dg/lookup/koenig1.C new file mode 100644 index 00000000000..697a322e3fb --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/koenig1.C @@ -0,0 +1,13 @@ +// { dg-do compile } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 24 Mar 2003 + +// PR 10026. We ICE'd + +class X; + +void foo() { + X x(1); // { dg-error "incomplete type" "" } + bar(x); // { dg-error "undeclared" "" } +} diff --git a/gcc/testsuite/g++.dg/lookup/template2.C b/gcc/testsuite/g++.dg/lookup/template2.C new file mode 100644 index 00000000000..0e8921261e8 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/template2.C @@ -0,0 +1,31 @@ +// { dg-do compile } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 24 Mar 2003 + +// PR 10199. Lookup problems + +class X { +public: + template + int bar (); +}; + +template +int fooo (); + +template +void bar (T& g) +{ + int kk = fooo<17>(); // OK + X x; + int k = x.bar<17>(); // Not OK +} + +int main () +{ + X x; + int k=x.bar<17>(); // OK + int n; + bar(n); +} -- 2.30.2