Commit b8865407 by Mark Mitchell Committed by Mark Mitchell

pt.c (for_each_template_parm): Rework to match documentation.

 	* pt.c (for_each_template_parm): Rework to match documentation.
	Don't be fooled by a COMPONENT_REF with no TREE_TYPE.

From-SVN: r27066
parent 6d813d4d
1999-05-20 Mark Mitchell <mark@codesourcery.com>
* pt.c (for_each_template_parm): Rework to match documentation.
Don't be fooled by a COMPONENT_REF with no TREE_TYPE.
1999-05-20 Jason Merrill <jason@yorick.cygnus.com> 1999-05-20 Jason Merrill <jason@yorick.cygnus.com>
* class.c (finish_struct_1): Still check for ANON_AGGR_TYPE_P. * class.c (finish_struct_1): Still check for ANON_AGGR_TYPE_P.
...@@ -18,6 +23,7 @@ ...@@ -18,6 +23,7 @@
(cplus_expand_expr): Here. Use cplus_expand_constant. (cplus_expand_expr): Here. Use cplus_expand_constant.
(init_cplus_expand): Set lang_expand_constant. (init_cplus_expand): Set lang_expand_constant.
* pt.c (convert_nontype_argument): Use make_ptrmem_cst. * pt.c (convert_nontype_argument): Use make_ptrmem_cst.
* tree.c (make_ptrmem_cst): Define. * tree.c (make_ptrmem_cst): Define.
* typeck.c (unary_complex_lvalue): Use make_ptrmem_cst. * typeck.c (unary_complex_lvalue): Use make_ptrmem_cst.
* typeck2.c (initializer_constant_valid_p): Use make_ptrmem_cst. * typeck2.c (initializer_constant_valid_p): Use make_ptrmem_cst.
......
...@@ -4019,13 +4019,6 @@ for_each_template_parm (t, fn, data) ...@@ -4019,13 +4019,6 @@ for_each_template_parm (t, fn, data)
switch (TREE_CODE (t)) switch (TREE_CODE (t))
{ {
case INDIRECT_REF:
case COMPONENT_REF:
/* We assume that the object must be instantiated in order to build
the COMPONENT_REF, so we test only whether the type of the
COMPONENT_REF uses template parms. */
return for_each_template_parm (TREE_TYPE (t), fn, data);
case ARRAY_REF: case ARRAY_REF:
case OFFSET_REF: case OFFSET_REF:
return (for_each_template_parm (TREE_OPERAND (t, 0), fn, data) return (for_each_template_parm (TREE_OPERAND (t, 0), fn, data)
...@@ -4183,10 +4176,6 @@ for_each_template_parm (t, fn, data) ...@@ -4183,10 +4176,6 @@ for_each_template_parm (t, fn, data)
/* NOTREACHED */ /* NOTREACHED */
return 0; return 0;
case LOOKUP_EXPR:
case TYPENAME_TYPE:
return 1;
case PTRMEM_CST: case PTRMEM_CST:
return for_each_template_parm (TREE_TYPE (t), fn, data); return for_each_template_parm (TREE_TYPE (t), fn, data);
...@@ -4199,6 +4188,21 @@ for_each_template_parm (t, fn, data) ...@@ -4199,6 +4188,21 @@ for_each_template_parm (t, fn, data)
(TREE_TYPE (t)), fn, data); (TREE_TYPE (t)), fn, data);
return for_each_template_parm (TREE_OPERAND (t, 1), fn, data); return for_each_template_parm (TREE_OPERAND (t, 1), fn, data);
case SIZEOF_EXPR:
case ALIGNOF_EXPR:
return for_each_template_parm (TREE_OPERAND (t, 0), fn, data);
case INDIRECT_REF:
case COMPONENT_REF:
/* We assume that the object must be instantiated in order to build
the COMPONENT_REF, so we test only whether the type of the
COMPONENT_REF uses template parms. On the other hand, if
there's no type, then this thing must be some expression
involving template parameters. */
if (TREE_TYPE (t))
return for_each_template_parm (TREE_TYPE (t), fn, data);
/* Fall through. */
case MODOP_EXPR: case MODOP_EXPR:
case CAST_EXPR: case CAST_EXPR:
case REINTERPRET_CAST_EXPR: case REINTERPRET_CAST_EXPR:
...@@ -4208,11 +4212,11 @@ for_each_template_parm (t, fn, data) ...@@ -4208,11 +4212,11 @@ for_each_template_parm (t, fn, data)
case ARROW_EXPR: case ARROW_EXPR:
case DOTSTAR_EXPR: case DOTSTAR_EXPR:
case TYPEID_EXPR: case TYPEID_EXPR:
return 1; case LOOKUP_EXPR:
case TYPENAME_TYPE:
case SIZEOF_EXPR: if (!fn)
case ALIGNOF_EXPR: return 1;
return for_each_template_parm (TREE_OPERAND (t, 0), fn, data); /* Fall through. */
default: default:
switch (TREE_CODE_CLASS (TREE_CODE (t))) switch (TREE_CODE_CLASS (TREE_CODE (t)))
......
// Build don't link:
// Origin: Mark Mitchell <mark@codesourcery.com>
template <int> struct S1{};
struct S2 { int i; };
template <class T>
void f(S2 s2) {
S1<s2.i> s1;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment