File tree Expand file tree Collapse file tree 1 file changed +13
-9
lines changed
Expand file tree Collapse file tree 1 file changed +13
-9
lines changed Original file line number Diff line number Diff line change @@ -5278,10 +5278,14 @@ static void peep_redunt_jmp(char *p) {
52785278 }
52795279}
52805280
5281- static void mark_alias_live (char * name ) {
5282- Obj * alias = get_symbol_var (name );
5283- if (alias )
5284- mark_live (alias );
5281+ static void mark_alias_live (Obj * var ) {
5282+ if (var -> is_live )
5283+ return ;
5284+ if (var -> alias_name ) {
5285+ Obj * alias = get_symbol_var (var -> alias_name );
5286+ if (alias )
5287+ mark_live (alias );
5288+ }
52855289}
52865290
52875291static void mark_live (Obj * var ) {
@@ -5290,8 +5294,7 @@ static void mark_live(Obj *var) {
52905294 var -> is_live = true;
52915295
52925296 if (!var -> is_definition ) {
5293- if (var -> alias_name )
5294- mark_alias_live (var -> alias_name );
5297+ mark_alias_live (var );
52955298 return ;
52965299 }
52975300 if (var -> ty -> kind == TY_FUNC ) {
@@ -5331,12 +5334,13 @@ int codegen(Obj *prog, FILE *out) {
53315334
53325335 for (Obj * var = prog ; var ; var = var -> next ) {
53335336 if (!var -> is_static || var -> is_used ) {
5334- if (var -> alias_name )
5335- mark_alias_live (var -> alias_name );
5336- else if ( var -> is_definition )
5337+ if (! var -> is_definition )
5338+ mark_alias_live (var );
5339+ else
53375340 mark_live (var );
53385341 }
53395342 }
5343+
53405344 for (Obj * var = prog ; var ; var = var -> next ) {
53415345 if (!var -> is_definition ) {
53425346 if (((!var -> is_static || var -> is_used ) && var -> alias_name ) ||
You can’t perform that action at this time.
0 commit comments