Compile error (unless adding extra lines) when multiple files in a single sketch

As I suspected, the problem is that the sketch preprocessor is adding the function prototypes inside the block comment. This also occurs with Arduino IDE 1.8.5. Here's the generated .cpp file:

#include <Arduino.h>
#line 1 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample.ino"
#line 1 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample.ino"
/*









Shorten this commented section by a row (any row between 1 and 19) and the issue does not appear







#line 19 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_01_Utilities.ino"
void function1();
#line 3 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_02_BLE.ino"
int gattWriteCallback(uint16_t value_handle, uint8_t *buffer, uint16_t size);
#line 2 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_03_OTA.ino"
static int handle_ota_data(uint8_t *buffer, uint16_t size);
#line 3 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_04_Main.ino"
void setup();
#line 6 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_04_Main.ino"
void loop();
#line 19 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_01_Utilities.ino"
*/

#line 1 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_00_Variables.ino"
int x;
int y;

#line 1 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_01_Utilities.ino"









// Line 11

// Line 13






void function1() {
  }

#line 1 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_02_BLE.ino"


int gattWriteCallback(uint16_t value_handle, uint8_t *buffer, uint16_t size)
{
    if(x == y)
    {
    } else if (x == 0){
      handle_ota_data(buffer, size);
    }
    return 0;
}


#line 1 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_03_OTA.ino"

static int handle_ota_data(uint8_t *buffer, uint16_t size){
}


#line 1 "C:\\Users\\per\\AppData\\Local\\Temp\\arduino_modified_sketch_571986\\sample_04_Main.ino"


void setup(){
}

void loop(){
}

I'm happy to report that this problem does not occur with Arduino IDE 1.9 Beta so there is no need to report the bug to the developers.

You can fix the issue by manually adding the problematic function prototypes:

void function1();
int gattWriteCallback(uint16_t value_handle, uint8_t *buffer, uint16_t size);
static int handle_ota_data(uint8_t *buffer, uint16_t size);
void setup();
void loop();