re PR c++/5050 (template instantiation depth exceeds/maybe recursion problem)
2003-12-22 Andrew Pinski <pinskia@physics.uc.edu> PR c++/5050 * tree.c (cp_start_inlining): Remove. (cp_end_inlining): Remove. * cp-lang.c (LANG_HOOKS_TREE_INLINING_START_INLINING): Do not define. (LANG_HOOKS_TREE_INLINING_END_INLINING): Do not define. * cp-tree.h (cp_start_inlining): Do not declare. (cp_end_inlining): Do not declare. PR c++/5050 * g++.dg/template/recurse1.C: New test. From-SVN: r74947
This commit is contained in:
parent
70a8416094
commit
92a12fbcc4
@ -1,3 +1,13 @@
|
||||
2003-12-22 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
PR c++/5050
|
||||
* tree.c (cp_start_inlining): Remove.
|
||||
(cp_end_inlining): Remove.
|
||||
* cp-lang.c (LANG_HOOKS_TREE_INLINING_START_INLINING): Do not define.
|
||||
(LANG_HOOKS_TREE_INLINING_END_INLINING): Do not define.
|
||||
* cp-tree.h (cp_start_inlining): Do not declare.
|
||||
(cp_end_inlining): Do not declare.
|
||||
|
||||
2003-12-22 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/12479
|
||||
|
@ -156,10 +156,6 @@ static void cxx_initialize_diagnostics (diagnostic_context *);
|
||||
#define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P anon_aggr_type_p
|
||||
#undef LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P
|
||||
#define LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P cp_var_mod_type_p
|
||||
#undef LANG_HOOKS_TREE_INLINING_START_INLINING
|
||||
#define LANG_HOOKS_TREE_INLINING_START_INLINING cp_start_inlining
|
||||
#undef LANG_HOOKS_TREE_INLINING_END_INLINING
|
||||
#define LANG_HOOKS_TREE_INLINING_END_INLINING cp_end_inlining
|
||||
#undef LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS
|
||||
#define LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS c_estimate_num_insns
|
||||
#undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN
|
||||
|
@ -4169,8 +4169,6 @@ extern int cp_is_overload_p (tree);
|
||||
extern int cp_auto_var_in_fn_p (tree,tree);
|
||||
extern tree cp_copy_res_decl_for_inlining (tree, tree, tree, void*,
|
||||
int*, tree);
|
||||
extern int cp_start_inlining (tree);
|
||||
extern void cp_end_inlining (tree);
|
||||
|
||||
/* in typeck.c */
|
||||
extern int string_conv_p (tree, tree, int);
|
||||
|
@ -2194,28 +2194,6 @@ cp_copy_res_decl_for_inlining (tree result,
|
||||
return var;
|
||||
}
|
||||
|
||||
/* Record that we're about to start inlining FN, and return nonzero if
|
||||
that's OK. Used for lang_hooks.tree_inlining.start_inlining. */
|
||||
|
||||
int
|
||||
cp_start_inlining (tree fn)
|
||||
{
|
||||
if (DECL_TEMPLATE_INSTANTIATION (fn))
|
||||
return push_tinst_level (fn);
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Record that we're done inlining FN. Used for
|
||||
lang_hooks.tree_inlining.end_inlining. */
|
||||
|
||||
void
|
||||
cp_end_inlining (tree fn ATTRIBUTE_UNUSED )
|
||||
{
|
||||
if (DECL_TEMPLATE_INSTANTIATION (fn))
|
||||
pop_tinst_level ();
|
||||
}
|
||||
|
||||
/* Initialize tree.c. */
|
||||
|
||||
void
|
||||
|
@ -1,3 +1,7 @@
|
||||
2003-12-22 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
* g++.dg/template/recurse1.C: New test
|
||||
|
||||
2003-12-22 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/12479
|
||||
|
16
gcc/testsuite/g++.dg/template/recurse1.C
Normal file
16
gcc/testsuite/g++.dg/template/recurse1.C
Normal file
@ -0,0 +1,16 @@
|
||||
// PR c++/5050
|
||||
// Origin: georg.wild@gmx.de
|
||||
// Reduced by: tbagot@bluearc.com and Nathanael C. Nerode <neroden@twcny.rr.com>
|
||||
// Test for that excessive template recursion does not occur
|
||||
// because of optimization.
|
||||
// { dg-options "-ftemplate-depth-1 -O" }
|
||||
|
||||
struct ostream {
|
||||
template<class T> ostream& foo( const T & )
|
||||
{ return *this; }
|
||||
};
|
||||
|
||||
void foo() {
|
||||
ostream os;
|
||||
(os.foo(1)).foo(2);
|
||||
}
|
Loading…
Reference in New Issue
Block a user