В одних компиляторах ошибок больше, в других меньше. Часто жалуются на ошибки в компиляторе для PIC32.
У меня было две ситуации.
Первая оказалась багом интерактивного отладчика, а не компилятора. Суть бага была в том, что я присваивал переменной значение, а оно при наведении мышкой не отображалось (отображалось старое или вообще постороннее). Всё работало правильно, но на ходу я не мог посмотреть значения переменных. ОКАЗАЛОСЬ, что отладчик иногда неверно находил адрес переменных. Он считал, что переменная расположена в регистре процессора, и отображал значение оттуда. А переменная на самом деле располагалась в памяти. Долго я думал, что дело в компиляторе, поэтому путём махинаций менял расположение переменных. После этого отладчик начинал воспринимать адреса правильно и всё показывать.
Вторая ситуация произошла недавно, и я так и не знаю, что это было и в чём причина. Функция математической обработки работала правильно год или два, но внезапно стала выдавать дичь. Несколько часов отладки выдали удивительный результат. ОКАЗАЛОСЬ, что float-значение, передающееся через параметр, не доходит до внутренностей функции. На входе никель, а на выходе -- пуговица. Конкретнее, я передаю, скажем, 5.0f, а в начале выполнения функции в переменной находится -3.2e19f. Это просто непостижимо. Я убрал все вычисления, все преобразования типов, стал просто передавать в функцию число -- но это не помогло. Я залез в дизассемблер, но увидел там фигу, потому что ассемблера PIC32 я как раз и не знаю (этот пробел надо восполнить; код вызова я сохранил). После некоторых колебаний я заменил аргумент с типа float на long double, тем более что все вычисления делались именно с long double. И... всё заработало.
Это однозначно указывает на ошибку компилятора, но что конкретно происходит, почему, и при каких условиях -- я пока не знаю.