Commit 57b52417 by Mark Mitchell Committed by Mark Mitchell

decl.c (layout_var_decl): Change prototype.

	* decl.c (layout_var_decl): Change prototype.  Call layout_decl
	even when the declaration is external.
	(cp_finish_decl): Adjust call to layout_var_decl.
	* pt.c (tsubst_expr): Make sure to initialize stmt before using it.

From-SVN: r29504
parent b534921a
1999-09-18 Mark Mitchell <mark@codesourcery.com>
* decl.c (layout_var_decl): Change prototype. Call layout_decl
even when the declaration is external.
(cp_finish_decl): Adjust call to layout_var_decl.
* pt.c (tsubst_expr): Make sure to initialize stmt before using it.
1999-09-18 Martin von Loewis <loewis@informatik.hu-berlin.de> 1999-09-18 Martin von Loewis <loewis@informatik.hu-berlin.de>
* typeck.c (get_member_function_from_ptrfunc): Always consider * typeck.c (get_member_function_from_ptrfunc): Always consider
......
...@@ -166,7 +166,7 @@ static tree make_label_decl PROTO((tree, int)); ...@@ -166,7 +166,7 @@ static tree make_label_decl PROTO((tree, int));
static void pop_label PROTO((tree)); static void pop_label PROTO((tree));
static void pop_labels PROTO((tree)); static void pop_labels PROTO((tree));
static void maybe_deduce_size_from_array_init PROTO((tree, tree)); static void maybe_deduce_size_from_array_init PROTO((tree, tree));
static tree layout_var_decl PROTO((tree, tree)); static void layout_var_decl PROTO((tree));
static void maybe_commonize_var PROTO((tree)); static void maybe_commonize_var PROTO((tree));
static tree check_initializer PROTO((tree, tree)); static tree check_initializer PROTO((tree, tree));
static void make_rtl_for_nonlocal_decl PROTO((tree, tree, const char *)); static void make_rtl_for_nonlocal_decl PROTO((tree, tree, const char *));
...@@ -7088,23 +7088,23 @@ maybe_deduce_size_from_array_init (decl, init) ...@@ -7088,23 +7088,23 @@ maybe_deduce_size_from_array_init (decl, init)
} }
/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
any appropriate error messages regarding the layout. INIT is a any appropriate error messages regarding the layout. */
the initializer for DECL; returns a modified version. */
static tree static void
layout_var_decl (decl, init) layout_var_decl (decl)
tree decl; tree decl;
tree init;
{ {
tree ttype = target_type (TREE_TYPE (decl)); tree type = TREE_TYPE (decl);
tree ttype = target_type (type);
/* If we haven't already layed out this declaration, and we know its
type, do so now. Note that we must not call complete type for an /* If we haven't already layed out this declaration, do so now.
external object because it's type might involve templates that we Note that we must not call complete type for an external object
are not supposed to isntantiate yet. */ because it's type might involve templates that we are not
if (!DECL_EXTERNAL (decl) supposed to isntantiate yet. (And it's perfectly legal to say
&& DECL_SIZE (decl) == NULL_TREE `extern X x' for some incomplete type `X'.) */
&& TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE) if (!DECL_EXTERNAL (decl))
complete_type (type);
if (!DECL_SIZE (decl)&& TYPE_SIZE (type))
layout_decl (decl, 0); layout_decl (decl, 0);
if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE) if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
...@@ -7131,8 +7131,6 @@ layout_var_decl (decl, init) ...@@ -7131,8 +7131,6 @@ layout_var_decl (decl, init)
else else
cp_error ("storage size of `%D' isn't constant", decl); cp_error ("storage size of `%D' isn't constant", decl);
} }
return init;
} }
/* If a local static variable is declared in an inline function, or if /* If a local static variable is declared in an inline function, or if
...@@ -7746,7 +7744,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags) ...@@ -7746,7 +7744,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
end_temporary_allocation (); end_temporary_allocation ();
if (TREE_CODE (decl) == VAR_DECL) if (TREE_CODE (decl) == VAR_DECL)
init = layout_var_decl (decl, init); layout_var_decl (decl);
/* Output the assembler code and/or RTL code for variables and functions, /* Output the assembler code and/or RTL code for variables and functions,
unless the type is an undefined structure or union. unless the type is an undefined structure or union.
......
...@@ -7446,7 +7446,7 @@ tsubst_expr (t, args, complain, in_decl) ...@@ -7446,7 +7446,7 @@ tsubst_expr (t, args, complain, in_decl)
prep_stmt (t); prep_stmt (t);
if (CLEANUP_P (t)) if (CLEANUP_P (t))
{ {
begin_try_block (); stmt = begin_try_block ();
tsubst_expr (TRY_STMTS (t), args, complain, in_decl); tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
finish_cleanup_try_block (stmt); finish_cleanup_try_block (stmt);
finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args, finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
......
// Origin: Alfred Minarik <a8601248@unet.univie.ac.at>
// Build don't link:
template <typename T>
struct allocator
{
typedef int size_type;
};
template <typename T>
struct string
{
typedef typename allocator<T>::size_type size_type;
static size_type size;
size_type
max_size() const { return size; }
};
template string <char>;
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