@@ -283,26 +283,28 @@ impl RuleMerger {
283283 ) ;
284284 }
285285
286- if let Some ( primary_rule) = & mut self . primary_rule {
287- if !r. cmds . is_empty ( ) && !is_suffix_rule ( & output) && !r. is_double_colon {
288- if FLAGS . werror_overriding_commands {
289- error_loc ! (
290- r. cmd_loc. as_ref( ) ,
291- "*** overriding commands for target `{output}', previously defined at {}" ,
292- primary_rule. cmd_loc. clone( ) . unwrap_or_default( )
293- ) ;
294- } else {
295- warn_loc ! (
296- r. cmd_loc. as_ref( ) ,
297- "warning: overriding commands for target `{output}'"
298- ) ;
299- warn_loc ! (
300- primary_rule. cmd_loc. as_ref( ) ,
301- "warning: ignoring old commands for target `{output}'"
302- )
303- }
304- * primary_rule = r. clone ( ) ;
286+ if let Some ( primary_rule) = & mut self . primary_rule
287+ && !r. cmds . is_empty ( )
288+ && !is_suffix_rule ( & output)
289+ && !r. is_double_colon
290+ {
291+ if FLAGS . werror_overriding_commands {
292+ error_loc ! (
293+ r. cmd_loc. as_ref( ) ,
294+ "*** overriding commands for target `{output}', previously defined at {}" ,
295+ primary_rule. cmd_loc. clone( ) . unwrap_or_default( )
296+ ) ;
297+ } else {
298+ warn_loc ! (
299+ r. cmd_loc. as_ref( ) ,
300+ "warning: overriding commands for target `{output}'"
301+ ) ;
302+ warn_loc ! (
303+ primary_rule. cmd_loc. as_ref( ) ,
304+ "warning: ignoring old commands for target `{output}'"
305+ )
305306 }
307+ * primary_rule = r. clone ( ) ;
306308 }
307309 if self . primary_rule . is_none ( ) && !r. cmds . is_empty ( ) {
308310 self . primary_rule = Some ( r. clone ( ) ) ;
@@ -329,10 +331,10 @@ impl RuleMerger {
329331
330332 fn fill_dep_node_loc ( & self , r : & Rule , n : & mut DepNode ) {
331333 n. loc = Some ( r. loc . clone ( ) ) ;
332- if !r. cmds . is_empty ( ) {
333- if let Some ( cmd_loc) = r. cmd_loc . clone ( ) {
334- n . loc = Some ( cmd_loc ) ;
335- }
334+ if !r. cmds . is_empty ( )
335+ && let Some ( cmd_loc) = r. cmd_loc . clone ( )
336+ {
337+ n . loc = Some ( cmd_loc ) ;
336338 }
337339 }
338340
@@ -355,10 +357,10 @@ impl RuleMerger {
355357 }
356358
357359 for r in & self . rules {
358- if let Some ( primary_rule) = & self . primary_rule {
359- if Arc :: ptr_eq ( r, primary_rule) {
360- continue ;
361- }
360+ if let Some ( primary_rule) = & self . primary_rule
361+ && Arc :: ptr_eq ( r, primary_rule)
362+ {
363+ continue ;
362364 }
363365 self . fill_dep_node_from_rule ( output, r, & mut n) ;
364366 if n. loc . is_none ( ) {
@@ -761,18 +763,18 @@ impl<'a> DepBuilder<'a> {
761763 fn pick_rule ( & mut self , output : Symbol , n : & Arc < Mutex < DepNode > > ) -> Option < PickedRuleInfo > {
762764 let rule_merger = self . lookup_rule_merger ( output) ;
763765 let vars = self . lookup_rule_vars ( output) ;
764- if let Some ( rule_merger) = & rule_merger {
765- if rule_merger. lock ( ) . primary_rule . is_some ( ) {
766- let mut vars = vars;
767- for ( sym, _) in & rule_merger. lock ( ) . implicit_outputs {
768- vars = self . merge_implicit_rule_vars ( * sym, vars) ;
769- }
770- return Some ( PickedRuleInfo {
771- merger : Some ( rule_merger. clone ( ) ) ,
772- pattern_rule : None ,
773- vars,
774- } ) ;
766+ if let Some ( rule_merger) = & rule_merger
767+ && rule_merger. lock ( ) . primary_rule . is_some ( )
768+ {
769+ let mut vars = vars;
770+ for ( sym, _) in & rule_merger. lock ( ) . implicit_outputs {
771+ vars = self . merge_implicit_rule_vars ( * sym, vars) ;
775772 }
773+ return Some ( PickedRuleInfo {
774+ merger : Some ( rule_merger. clone ( ) ) ,
775+ pattern_rule : None ,
776+ vars,
777+ } ) ;
776778 }
777779
778780 let irules = self . implicit_rules . get ( & output. as_bytes ( ) ) ;
@@ -891,17 +893,17 @@ impl<'a> DepBuilder<'a> {
891893 let Some ( mut picked_rule_info) = self . pick_rule ( output, & n) else {
892894 return Ok ( n) ;
893895 } ;
894- if let Some ( merger) = & picked_rule_info. merger {
895- if merger. lock ( ) . parent . is_some ( ) {
896- output = merger . lock ( ) . parent_sym . unwrap ( ) ;
897- self . done . insert ( output , n . clone ( ) ) ;
898- n . lock ( ) . output = output ;
899- let Some ( new_picked_rule_info ) = self . pick_rule ( output, & n ) else {
900- return Ok ( n ) ;
901- } ;
902- // Update the picked_rule_info with the new values
903- picked_rule_info = new_picked_rule_info ;
904- }
896+ if let Some ( merger) = & picked_rule_info. merger
897+ && merger. lock ( ) . parent . is_some ( )
898+ {
899+ output = merger . lock ( ) . parent_sym . unwrap ( ) ;
900+ self . done . insert ( output , n . clone ( ) ) ;
901+ n . lock ( ) . output = output ;
902+ let Some ( new_picked_rule_info ) = self . pick_rule ( output , & n ) else {
903+ return Ok ( n ) ;
904+ } ;
905+ // Update the picked_rule_info with the new values
906+ picked_rule_info = new_picked_rule_info ;
905907 }
906908 let output_str = output. as_bytes ( ) ;
907909
0 commit comments