LinkwitzRileyFilter causing distortion

Hi,
I wrote this simple audio processor and I don’t understand why the resulting audio is distorted. I’m using a separate filter for each channel. I also tried re-combining the split signal (adding samplesLeft to remainderLeft and respectively for the right channel) but even then the signal ends up distorted. Can anyone please help me here? Thank you in advance.

template <CutProcessorType type>
void CutProcessor<type>::process(const juce::dsp::ProcessContextReplacing<float>& context, float* const remainderLeft, float* const remainderRight) {
	auto&& inBlock = context.getInputBlock();
	auto&& outBlock = context.getOutputBlock();
	auto numSamples = inBlock.getNumSamples();
	auto numChannels = inBlock.getNumChannels();

	jassert(numSamples == outBlock.getNumSamples());
	jassert(numChannels == outBlock.getNumChannels());

	outBlock.copyFrom(inBlock);

	auto* const samplesLeft = outBlock.getChannelPointer(0);
	auto* const samplesRight = outBlock.getChannelPointer(1);
	for (std::size_t i = 0; i < numSamples; i++) {
		if constexpr (type == Type::LowCut)
			leftFilter.processSample(0, samplesLeft[i], remainderLeft[i], samplesLeft[i]);
		else
			leftFilter.processSample(0, samplesLeft[i], samplesLeft[i], remainderLeft[i]);
	}
	for (std::size_t i = 0; i < numSamples; i++) {
		if constexpr (type == Type::LowCut)
			rightFilter.processSample(1, samplesRight[i], remainderRight[i], samplesRight[i]);
		else
			rightFilter.processSample(1, samplesRight[i], samplesRight[i], remainderRight[i]);
	}
}

According to JUCE docs:

void dsp::LinkwitzRileyFilter< SampleType >::snapToZero () noexcept
Ensure that the state variables are rounded to zero if the state variables are denormals.
This is only needed if you are doing sample by sample processing.

LRFilters will cause phase-shift, therefore there will be some high peak values (BUT definitely not distortion).

Why do you have separate leftFilter and rightFilter objects but then also use channels 0 and 1?

I solved this problem myself, it had nothing to do with the code snipped I attached and was - of course - a very dumb mistake I’ve overlooked. First of all, thanks @kerfuffle, the separate left and right filters were unnecessary. The problem lied in my PluginProcessor.cpp. I called the prepare() method of my processor chain not in prepareToPlay() but instead in processBlock(), I just didn’t notice with all my other processors because they are not nearly as computationally complex as the LinkwitzRileyFilter.