LINUX.ORG.RU

xcode3


0

1

Столкнулся с багом в gcc-4.2.1 из поставки xcode 3.2.6, условие

float x = p->get(); // возвращает 400
if(x <= m_x) // m_x == 0
{
   // попадаем сюда
   if(1 < 1)
   {
      // а теперь сюда
   }
}

Ради интереса сделал так:

float x = p->get(); // возвращает 400
if(400 <= 0)
{
   // попадаем сюда
   if(1 < 1)
   {
      // а теперь сюда
   }
}

Что бы это значило?

★★★★★

Собирается приложение для симулятора iPad. В приложении куча условий, но только это выполняется несколько странно.

andreyu ★★★★★
() автор топика

может просто новый код не собирается/линкуется, т.е. дебажишь старый бинарник

aho
()
Ответ на: комментарий от aho

> может просто новый код не собирается/линкуется, т.е. дебажишь старый бинарник

Не похоже. Я почистил оба кеша - результат тот же.

p.s. Попробую прибить приложение в симуляторе и заодно проверю его на железяке.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

Запустил на железяке - тот же результат. Пропустил через анализатор из xcode - не нашлось проблем. Что, млять, за магия?

andreyu ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> какого типа m_x? В любом случае посмотри ассемблерный вывод.

Все float. Но это не имеет значения, т.к. второй пример тоже не работает.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

Пробую так (работает неправильно):

foo1()
{
   float x = p->get(); // возвращает 400
   if(m_x >= x) // m_x == 0
   {
      return true;
   }
   return false;
}

Так работает:

foo2()
{
   return(m_x >= x); // m_x == 0, p->get() == 400
}

foo1() - всегда true

foo2() - в зависимости от m_x и x (все корректно)

Что это, млять, за ерунда?

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

Все разобрался, мой косяк:

if(m_x >= x); // точка с запятой, почему компилер не выдает предупреждение?
{
  return true;
}
return false;

Похоже нельзя работать, когда болен.

andreyu ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.