if (int totalChans = jmax (totalOutputChans, totalInputChans))
buffer.setDataToReferTo (channelList.getRawDataPointer(), totalChans, (int) data.numSamples);
if you have no audio inputs or outputs then the buffer.setDataToReferTo line never gets called because 0 is falsey, so in a processBlock call buffer.getNumSamples() will always be 0. this seems like it would break code that depends on that value being present, eg the arpeggiator example.
compare to the code from juce_VST_Wrapper.cpp which does initialize it correctly in that case:
const int numChannels = jmax (numIn, numOut);
AudioBuffer<FloatType> chans (tmpBuffers.channels, isMidiEffect ? 0 : numChannels, numSamples);
