Author: hjz
Date: 2010-12-21 03:47:56 -0500 (Tue, 21 Dec 2010)
New Revision: 3444
Modified:
trunk/osprey/be/opt/opt_alias_class.cxx
Log:
Fix Bug #702. The bug is about alias classifying. SCLASS_FORMAL and
SCLASS_FORMAL_REF should not get its own class ID.
In opt_alias_class.cxx local variables (SCLASS_AUTO, SCLASS_FORMAL and
SCLASS_FORMAL_REF) defined in current PU get their own class ID. However,
uplevel variables should not get their own class ID. The old code only checks
the level of ST for SCLASS_AUTO. This fix adds guarded code also for
SCLASS_FORMAL and SCLASS_FORMAL_REF.
Approved by: Sun Chan
Modified: trunk/osprey/be/opt/opt_alias_class.cxx
===================================================================
--- trunk/osprey/be/opt/opt_alias_class.cxx 2010-12-21 04:08:24 UTC (rev
3443)
+++ trunk/osprey/be/opt/opt_alias_class.cxx 2010-12-21 08:47:56 UTC (rev
3444)
@@ -409,10 +409,10 @@
// If this base_id is a local variable or parameter, it gets its
// own class.
- if ((storage_class == SCLASS_AUTO &&
+ if (((storage_class == SCLASS_AUTO ||
+ storage_class == SCLASS_FORMAL ||
+ storage_class == SCLASS_FORMAL_REF) &&
ST_IDX_level(ST_st_idx(st)) == CURRENT_SYMTAB) ||
- storage_class == SCLASS_FORMAL ||
- storage_class == SCLASS_FORMAL_REF ||
storage_class == SCLASS_REG) {
// Set up the LDA and LDID classes for this variable...
ALIAS_CLASS_MEMBER *ldid_item = New_alias_class_member(id);
@@ -490,7 +490,8 @@
// uplevel reference and therefore must be treated as
// global because its address can be stored into a global,
// and it may contain the address of a global. Non-uplevel
- // references with SCLASS_AUTO are handled as locals above.
+ // references with SCLASS_AUTO, SCLASS_FORMAL or
+ // SCLASS_FORMAL_REF are handled as locals above.
// Including uplevel references here is the fix for 555533.
// 634200 was a milder case of the same problem, and only
// part of the fix was required to get that one right; that
@@ -498,6 +499,8 @@
// parameters; 555533 makes clear that we have to go
// all the way and treat them as globals.
storage_class == SCLASS_AUTO ||
+ storage_class == SCLASS_FORMAL ||
+ storage_class == SCLASS_FORMAL_REF ||
// storage class can be UNKNOWN for constant data because CG may
// already have run for an earlier PU and in the process lowered
// string (and maybe other) constants to .rodata. Unfortunately,
------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
Open64-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel