Сравнение битового поля с (отрицательным) целым числом, неопределенное поведение или ошибки компилятора?

Вот небольшая программа. Должен ли он печатать 0 или 1, или он имеет неопределенное поведение?

#include 
struct S0 {
  unsigned f1 : 1;
};

struct S0 s;

int main (void) {
  int x = -3;
  int y = x >= (0, s.f1);
  printf ("%d\n", y);
  return 0;
}

Это взято из повторного CSmith теста, и этот случай обсуждается подробнее здесь .

In в частности, GCC, KCC и CompCert выводят 0, тогда как MSVC 2010, ICC 12.0.2 и последние версии Clang выводят 1.

15
задан Lyke 14 July 2011 в 14:50
поделиться