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> 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 PR other/19897
* parse.y: (function_prototype): Accept EXTERNAL_REFERENCE_STORAGE. * parse.y: (function_prototype): Accept EXTERNAL_REFERENCE_STORAGE.
Move function parameters check from ... Move function parameters check from ...
......
...@@ -545,27 +545,25 @@ tree_code_create_variable (unsigned int storage_class, ...@@ -545,27 +545,25 @@ tree_code_create_variable (unsigned int storage_class,
DECL_SOURCE_LOCATION (var_decl) = loc; 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. */ /* Set the storage mode and whether only visible in the same file. */
switch (storage_class) switch (storage_class)
{ {
case STATIC_STORAGE: case STATIC_STORAGE:
TREE_STATIC (var_decl) = 1; TREE_STATIC (var_decl) = 1;
TREE_PUBLIC (var_decl) = 0;
break; break;
case AUTOMATIC_STORAGE: case AUTOMATIC_STORAGE:
TREE_STATIC (var_decl) = 0;
TREE_PUBLIC (var_decl) = 0;
break; break;
case EXTERNAL_DEFINITION_STORAGE: case EXTERNAL_DEFINITION_STORAGE:
TREE_STATIC (var_decl) = 0;
TREE_PUBLIC (var_decl) = 1; TREE_PUBLIC (var_decl) = 1;
break; break;
case EXTERNAL_REFERENCE_STORAGE: case EXTERNAL_REFERENCE_STORAGE:
DECL_EXTERNAL (var_decl) = 1; DECL_EXTERNAL (var_decl) = 1;
TREE_PUBLIC (var_decl) = 0;
break; break;
default: default:
...@@ -575,11 +573,6 @@ tree_code_create_variable (unsigned int storage_class, ...@@ -575,11 +573,6 @@ tree_code_create_variable (unsigned int storage_class,
/* This should really only be set if the variable is used. */ /* This should really only be set if the variable is used. */
TREE_USED (var_decl) = 1; 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); TYPE_NAME (TREE_TYPE (var_decl)) = TYPE_NAME (var_type);
return pushdecl (copy_node (var_decl)); return pushdecl (copy_node (var_decl));
} }
...@@ -1127,6 +1120,12 @@ pushdecl (tree decl) ...@@ -1127,6 +1120,12 @@ pushdecl (tree decl)
&& TYPE_NAME (TREE_TYPE (decl)) == 0) && TYPE_NAME (TREE_TYPE (decl)) == 0)
TYPE_NAME (TREE_TYPE (decl)) = DECL_NAME (decl); 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; 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