unable to find a register to spill in class 'POINTER_REGS'

Hi
I’m trying to make a script so I can control a LED strip with Blynk. But I get the error message when I try to compile my code.
I’ve located the problem to row 158:

colorProcent[i] = currentColorProcent[i] + fadeStepProcent[i];

but that’s simple addition of two doubles :o
For some reason it can compile the code if I make that row a comment.

When I searched for this error the one “solution” I found was to compile it with an old version of the Arduino IDE. (I’m normally using version 1.8.5)
I tried using version 1.0.5, but it wouldn’t even start. I showed the splash screen for a minute or two and the says there was an error when starting the IDE.
I tried the nightly build (1.8.6) as well, but I get the same error as in 1.8.5…

I also read that shuffle the code or restarting the IDE might work, but I still get the same error.

Any tips?

#include <BlynkSimpleStream.h>
#include <Adafruit_NeoPixel.h>
#include <TimeLib.h>
#include <WidgetRTC.h>

char auth[] = "MyToken";

#define PIN 2
#define NUMPIXELS 15
#define NUMCOLORS 3

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
BlynkTimer timer;

int maxColorPosition;

int fadeTimer;
int fadeTime = 1000;
int fadeSteps = 100;

double intensity = 0;
double currentIntensity = 0;

int setColor[NUMCOLORS];
double setColorProcent[NUMCOLORS];
int color[NUMCOLORS];
double colorProcent[NUMCOLORS];
double currentColorProcent[NUMCOLORS] = {0, 0, 0};
double fadeStepProcent[NUMCOLORS];
double fadeIntensity;

//---------------------------------------------------------------------------------

void setup() {
  Serial.begin(9600);
  Blynk.begin(Serial, auth);
  strip.begin();
  Blynk.syncAll();
}

void loop() {
  Blynk.run();
  timer.run();
}

//---------------------------------------------------------------------------------

BLYNK_WRITE(V0) {
  setColor[0] = param.asInt();
  return;
}

BLYNK_WRITE(V1) {
  setColor[1] = param.asInt();
  return;
}

BLYNK_WRITE(V2) {
  setColor[2] = param.asInt();
  return;
}

BLYNK_WRITE(V3) {
  calcSetColorProcent();
  calcFadeStep();
  fadeTimer = timer.setTimer(10, setStripFade, 100);
  return;
}

BLYNK_WRITE(V4) {
  intensity = param.asDouble() / 255;
  return;
}

BLYNK_WRITE(V9) {
  for (int i = 0; i < NUMCOLORS; i++) {
    setColorProcent[i] = 0;
  }
  setStripColor();
  return;
}

BLYNK_WRITE(V30) {
  Blynk.virtualWrite(V31, setColorProcent[0]);
  return;
}

//---------------------------------------------------------------------------------

void calcFadeStep() {
  for (int i = 0; i < NUMCOLORS; i++) {
    if (currentColorProcent[i] == setColorProcent[i]) {
      fadeStepProcent[i] = 0;
    } else {
      fadeStepProcent[i] = (setColorProcent[i] - currentColorProcent[i]) / fadeSteps;
    }
  }
  return;
}

void calcMaxColorPosition() {
  int tempMax = 0;
  for (int i = 0; i < NUMCOLORS; i++) {
    if (tempMax < setColor[i]) {
      maxColorPosition = i;
      tempMax = setColor[i];
    }
  }
  return;
}

void calcSetColorProcent() {
  calcMaxColorPosition();
  for (int i = 0; i < NUMCOLORS; i++) {
    setColorProcent[i] = (double)setColor[i]/setColor[maxColorPosition];
  }
}

bool checkColorChange() {
  for (int i = 0; i < NUMCOLORS; i++){
    if (color[i] != setColor[i]) {
      return true;
    }
  }
  return false;
}

bool checkIntensityChange() {
  if (currentIntensity != intensity) {
    return true;
  }
  return false;
}

void setStripColor() {
  for (int i = 0; i < NUMCOLORS; i++) {
    color[i] = setColorProcent[i] * intensity * 255;
    currentColorProcent[i] = (double)color[i] / 255;
  }
  
  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, color[0], color[1], color[2]);
  }
  strip.show();
  return;
}

void setStripFade() {
  double temp;
  for (int i = 0; i < NUMCOLORS; i++) {
    temp = setColorProcent[i] - currentColorProcent[i];
    if (abs(temp) < abs(fadeStepProcent[i])) {
      colorProcent[i] = setColorProcent[i];
    } else {
      colorProcent[i] = currentColorProcent[i] + fadeStepProcent[i];
    }
    color[i] = colorProcent[i] * intensity * 255;
    currentColorProcent[i] = (double)color[i] / 255;
  }
  
  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, color[0], color[1], color[2]);
  }
  strip.show();
  return;
}

It's caused by a bug in the compiler. You can find the workaround here:

Arduino has to wait until GCC fixes the bug, then when Arduino updates the toolchain version the problem will go away without needing the workaround any more.

That workaround does not help me, unfortunately. I still get the same error.