Commit fb26d54d by James A. Morrison

re PR treelang/19896 ([treelang] Static variables don't work)

2005-02-24  James A. Morrison  <phython@gcc.gnu.org>

        PR other/19896
        * treetree.c (tree_code_create_variable): Initialize DECL_EXTERNAL,
        TREE_PUBLIC, and TREE_STATIC for var_decl to zero.  Don't call
        rest_of_decl_compilation on static variables.
        (pushdecl): Put DECL_EXPRs into the current BIND_EXPR for automatic
        variables.

From-SVN: r95503
parent 77469ec5
2005-02-24 James A. Morrison <phython@gcc.gnu.org>
PR other/19896
* treetree.c (tree_code_create_variable): Initialize DECL_EXTERNAL,
TREE_PUBLIC, and TREE_STATIC for var_decl to zero. Don't call
rest_of_decl_compilation on static variables.
(pushdecl): Put DECL_EXPRs into the current BIND_EXPR for automatic
variables.
2005-02-24 James A. Morrison <phython@gcc.gnu.org>
PR other/19897
* parse.y: (function_prototype): Accept EXTERNAL_REFERENCE_STORAGE.
Move function parameters check from ...
......
......@@ -545,27 +545,25 @@ tree_code_create_variable (unsigned int storage_class,
DECL_SOURCE_LOCATION (var_decl) = loc;
DECL_EXTERNAL (var_decl) = 0;
TREE_PUBLIC (var_decl) = 0;
TREE_STATIC (var_decl) = 0;
/* Set the storage mode and whether only visible in the same file. */
switch (storage_class)
{
case STATIC_STORAGE:
TREE_STATIC (var_decl) = 1;
TREE_PUBLIC (var_decl) = 0;
break;
case AUTOMATIC_STORAGE:
TREE_STATIC (var_decl) = 0;
TREE_PUBLIC (var_decl) = 0;
break;
case EXTERNAL_DEFINITION_STORAGE:
TREE_STATIC (var_decl) = 0;
TREE_PUBLIC (var_decl) = 1;
break;
case EXTERNAL_REFERENCE_STORAGE:
DECL_EXTERNAL (var_decl) = 1;
TREE_PUBLIC (var_decl) = 0;
break;
default:
......@@ -575,11 +573,6 @@ tree_code_create_variable (unsigned int storage_class,
/* This should really only be set if the variable is used. */
TREE_USED (var_decl) = 1;
/* Expand declaration and initial value if any. */
if (TREE_STATIC (var_decl))
rest_of_decl_compilation (var_decl, 0, 0);
TYPE_NAME (TREE_TYPE (var_decl)) = TYPE_NAME (var_type);
return pushdecl (copy_node (var_decl));
}
......@@ -1127,6 +1120,12 @@ pushdecl (tree decl)
&& TYPE_NAME (TREE_TYPE (decl)) == 0)
TYPE_NAME (TREE_TYPE (decl)) = DECL_NAME (decl);
/* Put automatic variables into the intermediate representation. */
if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl)
&& !TREE_STATIC (decl) && !TREE_PUBLIC (decl))
tree_code_output_expression_statement (build1 (DECL_EXPR, void_type_node,
decl),
DECL_SOURCE_LOCATION (decl));
return decl;
}
......
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