On Thu, Mar 18, 2004 at 12:41:28AM -0800, Marcel Moolenaar wrote: > On Wed, Mar 17, 2004 at 11:30:14PM +0200, Ruslan Ermilov wrote: > > On Wed, Mar 17, 2004 at 12:51:04PM -0800, Marcel Moolenaar wrote: > > > On Wed, Mar 17, 2004 at 10:03:07PM +0200, Ruslan Ermilov wrote: > > > > > > > > > > > > for(i = 0; i < SOUND_MIXER_NRDEVICES; i++) { > > > > > > if ((1 << i) & mask) { > > > > > > v |= mt[i].iselect; > > > > > > } > > > > > > } > > > > > > > > > > > > > > > Actually, this is easily reproduceable by compiling the corresponding > > > > module on pluto1 with CFLAGS="-O2 -pipe" set in environment. There's > > > > clearly a bug in gcc(1), as: > > > > > > What happens if you replace the for-loop with an equivalent while-loop? > > > > > Doesn't make any difference. sparc64 and amd64 do not exhibit this problem. > > (Yes, I tested this on amd64 as well, skipping the final ld(1) step of the > > module's build.) > > The source code appears to be fishy. The variable v is never used. > It's only defined. If you change the "return mask" to a "return v", > the warning goes away. > But other *_setrecsrc() methods return "mask" too. It looks like it computes something but doesn't use that computed value to program the device, as other *_setrecsrc() methods do. (Still, gcc(1) is buggy here.) Cheers, -- Ruslan Ermilov FreeBSD committer ru_at_FreeBSD.org
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:48 UTC