re PR treelang/19896 ([treelang] Static variables don't work)
authorJames A. Morrison <phython@gcc.gnu.org>
Thu, 24 Feb 2005 16:23:14 +0000 (16:23 +0000)
committerJames A. Morrison <phython@gcc.gnu.org>
Thu, 24 Feb 2005 16:23:14 +0000 (16:23 +0000)
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

gcc/treelang/ChangeLog
gcc/treelang/treetree.c

index 6d05ce1c9b90323822c5d33adb9dc614e1df188d..892e3baabc42b9da2c0364d87d424ea280009bc0 100644 (file)
@@ -1,3 +1,12 @@
+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
index 73dab2d290ee2e435924e8e8078f205e72fcc9f6..eef293bb2f76536d349dcf7e95d83d3fd6635764 100644 (file)
@@ -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;
 }
 \f