Re: [AD] Fixing a pair of trivial warnings in Allegro 4.4

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


In that case, I guess the best solution would be to set that flag, but for only that file. Something along the lines of

'set_source_files_properties(src/unix/uossmidi.c PROPERTIES COMPILE_FLAGS -fno-strict-aliasing)'

That'll have to be conditioned on the compiler being GCC, naturally.

-SL

On 09/01/2015 11:20 PM, Boon947 wrote:
The aliasing bug is upstream, in linux/soundcard.h

src/unix/uossmidi.c: In function 'oss_midi_key_on':
src/unix/uossmidi.c:529:7: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
        SEQ_SET_PATCH(seq_device, hwvoice, inst);
        ^
src/unix/uossmidi.c:533:4: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     SEQ_CONTROL(seq_device, hwvoice, CTL_PAN, pan);
     ^
src/unix/uossmidi.c:534:4: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     SEQ_BENDER(seq_device, hwvoice, 8192 + bend);
     ^
src/unix/uossmidi.c: In function 'oss_midi_set_volume':
src/unix/uossmidi.c:562:4: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     SEQ_CONTROL(seq_device, voice, CTL_MAIN_VOLUME, vol);
     ^
src/unix/uossmidi.c: In function 'oss_midi_set_pitch':
src/unix/uossmidi.c:572:4: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     SEQ_CONTROL(seq_device, voice, CTRL_PITCH_BENDER, 8192 + bend);
     ^


#define SEQ_CONTROL(dev, chn, controller, value) \
		_CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)

#define SEQ_BENDER(dev, chn, value) \
		_CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)

#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
					{_SEQ_NEEDBUF(8);\
					_seqbuf[_seqbufptr] = EV_CHN_COMMON;\
					_seqbuf[_seqbufptr+1] = (dev);\
					_seqbuf[_seqbufptr+2] = (event);\
					_seqbuf[_seqbufptr+3] = (chn);\
					_seqbuf[_seqbufptr+4] = (p1);\
					_seqbuf[_seqbufptr+5] = (p2);\
					*(short *)&_seqbuf[_seqbufptr+6] = (w14);\
					_SEQ_ADVBUF(8);}

*(short *)&_seqbuf[_seqbufptr+6] is an aliasing rule violation, AFAIU.

What course of action do you suggest?

Regards.


On 02/09/2015 03:15, SiegeLord wrote:

Thanks, applied. The best way to send patches these days is through github.

I'd prefer to fix the aliasing bugs, rather than disabling the aliasing
optimizations, but if that's not possible, it'd be ok by me to add that
flag.

-SL

On 09/01/2015 01:46 PM, Boon947 wrote:
Hello,

I've posted this patch to the forums, but the discussion seems
to have died down. Is the mailing list a better place to discuss
patches?

The attached patch fixes a pair of trivial warnings in Allegro 4.4

I also noticed a warning about an aliasing problem in the OSS code;
with compilers becoming more aggressive at high optimization levels,
it might be prudent to add -fno-strict-aliasing to the CFLAGS, as
Linux has been doing for ages.

Regards.





Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/