Оптимизация компилятора, потокобезопасность?

У меня есть вопрос относительно оптимизации, которую потенциально может выполнить компилятор.

Приведенный ниже код говорит сам за себя (это пример):

typedef struct  test
{
  short i;
}               s_test;

int function1(char *bin)
{
  s_test foo;

  lock(gmutex);
  foo.i = *(int*)bin * 8;
  unlock(gmutex);

  sleep(5);
  //
  // Here anything can happen to *bin in another thread
  // an inline example here could be: *(volatile int *)bin = 42;
  //

  int b = foo.i + sizeof(char*);

  return (b > 1000);
}

Мог ли компилятор когда-либо заменить последние строки на

return ((*(int*)bin * 8 + sizeof(char*)) > 1000);

Это не похоже на случай использования -O2 или -O3 с gcc 4.4, но может ли быть так с другими компиляторами и с другими флагами компиляции?

6
задан undur_gongor 5 June 2012 в 10:21
поделиться