Skip to content

Commit ac71fab

Browse files
committed
gcc-15: work around sequence-point warning
The C sequence points are complicated things, and gcc-15 has apparently added a warning for the case where an object is both used and modified multiple times within the same sequence point. That's a great warning. Or rather, it would be a great warning, except gcc-15 seems to not really be very exact about it, and doesn't notice that the modification are to two entirely different members of the same object: the array counter and the array entries. So that seems kind of silly. That said, the code that gcc complains about is unnecessarily complicated, so moving the array counter update into a separate statement seems like the most straightforward fix for these warnings: drivers/net/wireless/intel/iwlwifi/mld/d3.c: In function ‘iwl_mld_set_netdetect_info’: drivers/net/wireless/intel/iwlwifi/mld/d3.c:1102:66: error: operation on ‘netdetect_info->n_matches’ may be undefined [-Werror=sequence-point] 1102 | netdetect_info->matches[netdetect_info->n_matches++] = match; | ~~~~~~~~~~~~~~~~~~~~~~~~~^~ drivers/net/wireless/intel/iwlwifi/mld/d3.c:1120:58: error: operation on ‘match->n_channels’ may be undefined [-Werror=sequence-point] 1120 | match->channels[match->n_channels++] = | ~~~~~~~~~~~~~~~~~^~ side note: the code at that second warning is actively buggy, and only works on little-endian machines that don't do strict alignment checks. The code casts an array of integers into an array of unsigned long in order to use our bitmap iterators. That happens to work fine on any sane architecture, but it's still wrong. This does *not* fix that more serious problem. This only splits the two assignments into two statements and fixes the compiler warning. I need to get rid of the new warnings in order to be able to actually do any build testing. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 05e8d26 commit ac71fab

File tree

1 file changed

+6
-3
lines changed
  • drivers/net/wireless/intel/iwlwifi/mld

1 file changed

+6
-3
lines changed

drivers/net/wireless/intel/iwlwifi/mld/d3.c

+6-3
Original file line numberDiff line numberDiff line change
@@ -1099,7 +1099,8 @@ iwl_mld_set_netdetect_info(struct iwl_mld *mld,
10991099
if (!match)
11001100
return;
11011101

1102-
netdetect_info->matches[netdetect_info->n_matches++] = match;
1102+
netdetect_info->matches[netdetect_info->n_matches] = match;
1103+
netdetect_info->n_matches++;
11031104

11041105
/* We inverted the order of the SSIDs in the scan
11051106
* request, so invert the index here.
@@ -1116,9 +1117,11 @@ iwl_mld_set_netdetect_info(struct iwl_mld *mld,
11161117

11171118
for_each_set_bit(j,
11181119
(unsigned long *)&matches[i].matching_channels[0],
1119-
sizeof(matches[i].matching_channels))
1120-
match->channels[match->n_channels++] =
1120+
sizeof(matches[i].matching_channels)) {
1121+
match->channels[match->n_channels] =
11211122
netdetect_cfg->channels[j]->center_freq;
1123+
match->n_channels++;
1124+
}
11221125
}
11231126
}
11241127

0 commit comments

Comments
 (0)