LINUX.ORG.RU

История изменений

Исправление ckotinko, (текущая версия) :

я правда не могу взять и скопировать код. во первых это код с работы. во вторых там непонятно сколько копировать. баг не сразу триггерится.

как он вызывается:

class LOL {
   int b;
   void lol(int a) {
       int d = 8191&(b-a);
       if (d >= 0) { }
       b = a;
   }
}
int foo(double a) {
    return 8191&int(a);
}
int bar(LOL * lol, int a) {
    lol->lol(foo(a));
}
пропадает при переносе функции в другой файл. это не UB, это баг. такая «оптимизация» недопустима. логическое И и вычитание некоммутативны. тьфу неассоциативны.

Исходная версия ckotinko, :

я правда не могу взять и скопировать код. во первых это код с работы. во вторых там непонятно сколько копировать. баг не сразу триггерится.

как он вызывается:

class LOL {
   int b;
   void lol(int a) {
       int d = 8191&(b-a);
       if (d >= 0) { }
       b = a;
   }
}
int foo(double a) {
    return 8191&int(a);
}
int bar(LOL * lol, int a) {
    lol->lol(foo(a));
}
пропадает при переносе функции в другой файл. это не UB, это баг. такая «оптимизация» недопустима. логическое И и вычитание некоммутативны.