20020506-1.c

来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 334 行

C
334
字号
/* Copyright (C) 2002  Free Software Foundation.   Test that (A & C1) op C2 optimizations behave correctly where C1 is   a constant power of 2, op is == or !=, and C2 is C1 or zero.   Written by Roger Sayle, 5th May 2002.  */#include <limits.h>extern void abort (void);void test1 (signed char c, int set);void test2 (unsigned char c, int set);void test3 (short s, int set);void test4 (unsigned short s, int set);void test5 (int i, int set);void test6 (unsigned int i, int set);void test7 (long long l, int set);void test8 (unsigned long long l, int set);#ifndef LONG_LONG_MAX#define LONG_LONG_MAX __LONG_LONG_MAX__#endif#ifndef LONG_LONG_MIN#define LONG_LONG_MIN (-LONG_LONG_MAX-1)#endif#ifndef ULONG_LONG_MAX#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)#endifvoidtest1 (signed char c, int set){  if ((c & (SCHAR_MAX+1)) == 0)    {      if (set) abort ();    }  else    if (!set) abort ();  if ((c & (SCHAR_MAX+1)) != 0)    {      if (!set) abort ();    }  else    if (set) abort ();  if ((c & (SCHAR_MAX+1)) == (SCHAR_MAX+1))    {      if (!set) abort ();    }  else    if (set) abort ();  if ((c & (SCHAR_MAX+1)) != (SCHAR_MAX+1))    {      if (set) abort ();    }  else    if (!set) abort ();}voidtest2 (unsigned char c, int set){  if ((c & (SCHAR_MAX+1)) == 0)    {      if (set) abort ();    }  else    if (!set) abort ();  if ((c & (SCHAR_MAX+1)) != 0)    {      if (!set) abort ();    }  else    if (set) abort ();  if ((c & (SCHAR_MAX+1)) == (SCHAR_MAX+1))    {      if (!set) abort ();    }  else    if (set) abort ();  if ((c & (SCHAR_MAX+1)) != (SCHAR_MAX+1))    {      if (set) abort ();    }  else    if (!set) abort ();}voidtest3 (short s, int set){  if ((s & (SHRT_MAX+1)) == 0)    {      if (set) abort ();    }  else    if (!set) abort ();  if ((s & (SHRT_MAX+1)) != 0)    {      if (!set) abort ();    }  else    if (set) abort ();  if ((s & (SHRT_MAX+1)) == (SHRT_MAX+1))    {      if (!set) abort ();    }  else    if (set) abort ();  if ((s & (SHRT_MAX+1)) != (SHRT_MAX+1))    {      if (set) abort ();    }  else    if (!set) abort ();}voidtest4 (unsigned short s, int set){  if ((s & (SHRT_MAX+1)) == 0)    {      if (set) abort ();    }  else    if (!set) abort ();  if ((s & (SHRT_MAX+1)) != 0)    {      if (!set) abort ();    }  else    if (set) abort ();  if ((s & (SHRT_MAX+1)) == (SHRT_MAX+1))    {      if (!set) abort ();    }  else    if (set) abort ();  if ((s & (SHRT_MAX+1)) != (SHRT_MAX+1))    {      if (set) abort ();    }  else    if (!set) abort ();}voidtest5 (int i, int set){  if ((i & (INT_MAX+1U)) == 0)    {      if (set) abort ();    }  else    if (!set) abort ();  if ((i & (INT_MAX+1U)) != 0)    {      if (!set) abort ();    }  else    if (set) abort ();  if ((i & (INT_MAX+1U)) == (INT_MAX+1U))    {      if (!set) abort ();    }  else    if (set) abort ();  if ((i & (INT_MAX+1U)) != (INT_MAX+1U))    {      if (set) abort ();    }  else    if (!set) abort ();}voidtest6 (unsigned int i, int set){  if ((i & (INT_MAX+1U)) == 0)    {      if (set) abort ();    }  else    if (!set) abort ();  if ((i & (INT_MAX+1U)) != 0)    {      if (!set) abort ();    }  else    if (set) abort ();  if ((i & (INT_MAX+1U)) == (INT_MAX+1U))    {      if (!set) abort ();    }  else    if (set) abort ();  if ((i & (INT_MAX+1U)) != (INT_MAX+1U))    {      if (set) abort ();    }  else    if (!set) abort ();}voidtest7 (long long l, int set){  if ((l & (LONG_LONG_MAX+1ULL)) == 0)    {      if (set) abort ();    }  else    if (!set) abort ();  if ((l & (LONG_LONG_MAX+1ULL)) != 0)    {      if (!set) abort ();    }  else    if (set) abort ();  if ((l & (LONG_LONG_MAX+1ULL)) == (LONG_LONG_MAX+1ULL))    {      if (!set) abort ();    }  else    if (set) abort ();  if ((l & (LONG_LONG_MAX+1ULL)) != (LONG_LONG_MAX+1ULL))    {      if (set) abort ();    }  else    if (!set) abort ();}voidtest8 (unsigned long long l, int set){  if ((l & (LONG_LONG_MAX+1ULL)) == 0)    {      if (set) abort ();    }  else    if (!set) abort ();  if ((l & (LONG_LONG_MAX+1ULL)) != 0)    {      if (!set) abort ();    }  else    if (set) abort ();  if ((l & (LONG_LONG_MAX+1ULL)) == (LONG_LONG_MAX+1ULL))    {      if (!set) abort ();    }  else    if (set) abort ();  if ((l & (LONG_LONG_MAX+1ULL)) != (LONG_LONG_MAX+1ULL))    {      if (set) abort ();    }  else    if (!set) abort ();}intmain (){  test1 (0, 0);  test1 (SCHAR_MAX, 0);  test1 (SCHAR_MIN, 1);  test1 (UCHAR_MAX, 1);  test2 (0, 0);  test2 (SCHAR_MAX, 0);  test2 (SCHAR_MIN, 1);  test2 (UCHAR_MAX, 1);  test3 (0, 0);  test3 (SHRT_MAX, 0);  test3 (SHRT_MIN, 1);  test3 (USHRT_MAX, 1);  test4 (0, 0);  test4 (SHRT_MAX, 0);  test4 (SHRT_MIN, 1);  test4 (USHRT_MAX, 1);  test5 (0, 0);  test5 (INT_MAX, 0);  test5 (INT_MIN, 1);  test5 (UINT_MAX, 1);  test6 (0, 0);  test6 (INT_MAX, 0);  test6 (INT_MIN, 1);  test6 (UINT_MAX, 1);  test7 (0, 0);  test7 (LONG_LONG_MAX, 0);  test7 (LONG_LONG_MIN, 1);  test7 (ULONG_LONG_MAX, 1);  test8 (0, 0);  test8 (LONG_LONG_MAX, 0);  test8 (LONG_LONG_MIN, 1);  test8 (ULONG_LONG_MAX, 1);  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?