Author: yug
Date: 2011-12-07 03:48:20 -0500 (Wed, 07 Dec 2011)
New Revision: 3846

Modified:
   trunk/osprey/be/cg/cgemit.cxx
   trunk/osprey/wgen/wgen_decl.cxx
Log:
fix bug924 and the regression(20040323-1) caused by r3758

successive patch on alias attribute handling, i.e, right setup the alias
symbol storage.

Code Review: Lai Jian-Xin.


Modified: trunk/osprey/be/cg/cgemit.cxx
===================================================================
--- trunk/osprey/be/cg/cgemit.cxx       2011-12-06 13:02:06 UTC (rev 3845)
+++ trunk/osprey/be/cg/cgemit.cxx       2011-12-07 08:48:20 UTC (rev 3846)
@@ -8267,7 +8267,9 @@
                    ST_base_idx(sym) != ST_st_idx(sym) &&
                    !ST_is_equivalenced(sym) &&
                    ST_class(ST_base(sym)) != CLASS_BLOCK &&
-                    pu != NULL && ! PU_ftn_lang(*pu) /* bug 13585 */)
+                    // originally bug 13585. bug 924 open64.net.
+                    // no pu case should also be considered.
+                    ((!pu) || !PU_ftn_lang (*pu)))
                  goto skip_definition;
 #endif
                size = TY_size(ST_type(sym));

Modified: trunk/osprey/wgen/wgen_decl.cxx
===================================================================
--- trunk/osprey/wgen/wgen_decl.cxx     2011-12-06 13:02:06 UTC (rev 3845)
+++ trunk/osprey/wgen/wgen_decl.cxx     2011-12-07 08:48:20 UTC (rev 3846)
@@ -4723,12 +4723,28 @@
   else {
     Set_ST_base_idx (st, ST_st_idx (base_st));
     Set_ST_emit_symbol(st);    // for cg
-    if (ST_is_initialized (base_st))
+    if (ST_is_initialized (base_st)) {
       Set_ST_is_initialized (st);
+      // bug924 open64.net. global alias symbol with base initialized
+      // should set storage class SCLASS_DGLOBAL.
+      if (ST_sclass(st) == SCLASS_COMMON || ST_sclass(st) == SCLASS_UGLOBAL) 
+        Set_ST_sclass (st, SCLASS_DGLOBAL);
+    }
 #ifdef KEY
-    if (ST_init_value_zero (base_st))
+    if (ST_init_value_zero (base_st)) {
       Set_ST_init_value_zero (st);
+      // bug924 open64.net. Those base initialized zero
+      // symbols should restore to SCLASS_UGLOBAL.
+      if (ST_sclass(st) == SCLASS_DGLOBAL)
+        Set_ST_sclass (st, SCLASS_UGLOBAL);
+    }
 #endif
+    // bug924 open64.net aliased symbols in COMMON section should be 
+    // set to be uninitialized. Since aliased symbols themselves 
+    // should never be allocated.
+    if (ST_sclass(st) == SCLASS_COMMON) {
+      Set_ST_sclass (st, SCLASS_UGLOBAL);
+    }
   }
 #ifdef KEY
   if (!lang_cplus)


------------------------------------------------------------------------------
Cloud Services Checklist: Pricing and Packaging Optimization
This white paper is intended to serve as a reference, checklist and point of 
discussion for anyone considering optimizing the pricing and packaging model 
of a cloud services business. Read Now!
http://www.accelacomm.com/jaw/sfnl/114/51491232/
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to