Since around 2010/09/07 g++ started to barf on the attached source about a
mismatched prototype. Apparently the culprit is the forward declaration + later
definition with additional attribute of one of the argument, and, if the
forward declaration is sprinkled with said attribute, the error goes away.

I've failed to reduce both manually and with delta (mismatched prototypes are
too easily produced). Sorry.

$ /usr/local/gcc-4.6-20100910/bin/g++ -std=c++0x -c synth.ii
src/audio/synth_voice_impl.h:140:6: error: prototype for 'bool
synth::voice::voice_t::produce_chunk(const synth::semitones_lut_t&, const
synth::midi_channels_params_t&, synth::chunk_array_mono_t&)' does not match any
in class 'synth::voice::voice_t'
src/audio/synth_voice.h:153:156: error: candidate is:
template<synth::voice::waves::waves_enum_t wave_shape> bool
synth::voice::voice_t::produce_chunk(const synth::semitones_lut_t&, const
synth::midi_channels_params_t&, synth::chunk_array_mono_t&)
$ /usr/local/gcc-4.6-20100910/bin/g++ -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/usr/local/gcc-4.6.0
--enable-languages=c,c++ --enable-threads=posix --disable-checking
--disable-nls --with-system-zlib --disable-bootstrap --enable-checking=none
--enable-mpfr --enable-gold --enable-lto --with-ppl --with-cloog
Thread model: posix
gcc version 4.6.0 20100910 (experimental) (GCC) 

midi_channels_params_t is the trigger.
Known to work on g++ 4.4.x, 4.5.x and up to and including 4.6-20100901.


           Summary: g++ 4.6 regression, c++0x, weird mismatch for arguments
                    with forwarded declaration when attributes are involved
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: tbptbp at gmail dot com

Reply via email to