aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2003-03-27 14:04:28 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2003-03-27 14:04:28 +0000
commit544aef8cc9fc31e1e7a4edb381c275e7719b26ed (patch)
tree2b7e642b34f67ebc1076c7146d8ce1c92de5e419 /gcc
parent649fc72d2638dfc1edac57bb5dc9525bdf4911e5 (diff)
downloadgcc-544aef8cc9fc31e1e7a4edb381c275e7719b26ed.zip
gcc-544aef8cc9fc31e1e7a4edb381c275e7719b26ed.tar.gz
gcc-544aef8cc9fc31e1e7a4edb381c275e7719b26ed.tar.bz2
re PR c++/10224 (Problem with integral constants (+ICE))
cp: PR c++/10224 * pt.c (lookup_template_class): Only check instantiated args if they do not contain template parameters. testsuite: PR c++/10224 * g++.dg/template/arg3.C: New test. From-SVN: r64923
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/template/arg3.C17
4 files changed, 28 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8d835ec..c747679 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,11 @@
2003-03-27 Nathan Sidwell <nathan@codesourcery.com>
+ PR c++/10224
+ * pt.c (lookup_template_class): Only check instantiated args if
+ they do not contain template parameters.
+
+2003-03-27 Nathan Sidwell <nathan@codesourcery.com>
+
PR c++/10158
* parser.c (cp_parser_function_definition): Set
DECL_INITIALIZED_IN_CLASS for members.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index c04c602..a79b8a5 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -4181,7 +4181,7 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope, complain)
arglist2 = coerce_template_parms (parmlist, arglist, template,
complain, /*require_all_args=*/1);
if (arglist2 == error_mark_node
- || (!processing_template_decl
+ || (!uses_template_parms (arglist2)
&& check_instantiated_args (template, arglist2, complain)))
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
@@ -4272,7 +4272,7 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope, complain)
complain, /*require_all_args=*/1);
if (arglist == error_mark_node
- || (!processing_template_decl
+ || (!uses_template_parms (INNERMOST_TEMPLATE_ARGS (arglist))
&& check_instantiated_args (template,
INNERMOST_TEMPLATE_ARGS (arglist),
complain)))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cb64310..405556d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2003-03-27 Nathan Sidwell <nathan@codesourcery.com>
+ PR c++/10224
+ * g++.dg/template/arg3.C: New test.
+
PR c++/10158
* g++.dg/template/friend18.C: New test.
diff --git a/gcc/testsuite/g++.dg/template/arg3.C b/gcc/testsuite/g++.dg/template/arg3.C
new file mode 100644
index 0000000..050aa33
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/arg3.C
@@ -0,0 +1,17 @@
+// { dg-do compile }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 27 Mar 2003 <nathan@codesourcery.com>
+
+// PR 10224. Rejected a valid constant argument.
+
+template <bool B> struct X {
+ struct I {};
+};
+
+template <typename T> struct Y {
+ static const bool selector = true;
+ typedef typename X<selector>::I helper;
+};
+
+Y<int> i;