/* Copyright (C) 2004 Free Software Foundation. Verify that built-in ctype transformations are done correctly by the compiler. Written by Kaveh Ghazi, 2004-04-05. */ /* { dg-do link } */ extern void link_failure_var(void); void test(int i) { /* All of these ctype calls should compile-time evaluate to true. */ #define TEST_CTYPE_CST_TRUE(FN, VALUE) \ extern void link_failure_##FN##_cst_true(void); \ extern int FN(int); \ if (! FN(VALUE)) \ link_failure_##FN##_cst_true() /* All of these ctype calls should compile-time evaluate to false. */ #define TEST_CTYPE_CST_FALSE(FN, VALUE) \ extern void link_failure_##FN##_cst_false(void); \ extern int FN(int); \ if (FN(VALUE)) \ link_failure_##FN##_cst_false() /* All of these ctype calls should compile-time evaluate to true. */ #define TEST_TOCTYPE_CST_TRUE(FN, VALUE) \ extern void link_failure_##FN##_cst_true(void); \ extern int FN(int); \ if (FN(VALUE) != (VALUE)) \ link_failure_##FN##_cst_true() /* All of these ctype calls should compile-time evaluate to false. */ #define TEST_TOCTYPE_CST_FALSE(FN, VALUE) \ extern void link_failure_##FN##_cst_false(void); \ extern int FN(int); \ if (FN(VALUE) == (VALUE)) \ link_failure_##FN##_cst_false() #ifdef __OPTIMIZE__ TEST_CTYPE_CST_TRUE (isascii, 0); TEST_CTYPE_CST_TRUE (isascii, 1); TEST_CTYPE_CST_TRUE (isascii, 126); TEST_CTYPE_CST_TRUE (isascii, 127); TEST_CTYPE_CST_FALSE (isascii, -1); TEST_CTYPE_CST_FALSE (isascii, 128); TEST_CTYPE_CST_FALSE (isascii, 129); TEST_CTYPE_CST_FALSE (isascii, 255); TEST_CTYPE_CST_FALSE (isascii, 256); TEST_CTYPE_CST_FALSE (isascii, 257); TEST_CTYPE_CST_FALSE (isascii, 10000); TEST_CTYPE_CST_FALSE (isascii, __INT_MAX__); /* This ctype call should transform into another expression. */ if (isascii(i) != ((i & ~0x7f) == 0)) link_failure_var(); TEST_TOCTYPE_CST_TRUE (toascii, 0); TEST_TOCTYPE_CST_TRUE (toascii, 1); TEST_TOCTYPE_CST_TRUE (toascii, 126); TEST_TOCTYPE_CST_TRUE (toascii, 127); TEST_TOCTYPE_CST_FALSE (toascii, -1); TEST_TOCTYPE_CST_FALSE (toascii, 128); TEST_TOCTYPE_CST_FALSE (toascii, 129); TEST_TOCTYPE_CST_FALSE (toascii, 255); TEST_TOCTYPE_CST_FALSE (toascii, 256); TEST_TOCTYPE_CST_FALSE (toascii, 10000); TEST_TOCTYPE_CST_FALSE (toascii, __INT_MAX__); /* This ctype call should transform into another expression. */ if (toascii(i) != (i & 0x7f)) link_failure_var(); TEST_CTYPE_CST_TRUE (isdigit, '0'); TEST_CTYPE_CST_TRUE (isdigit, '1'); TEST_CTYPE_CST_TRUE (isdigit, '2'); TEST_CTYPE_CST_TRUE (isdigit, '3'); TEST_CTYPE_CST_TRUE (isdigit, '4'); TEST_CTYPE_CST_TRUE (isdigit, '5'); TEST_CTYPE_CST_TRUE (isdigit, '6'); TEST_CTYPE_CST_TRUE (isdigit, '7'); TEST_CTYPE_CST_TRUE (isdigit, '8'); TEST_CTYPE_CST_TRUE (isdigit, '9'); TEST_CTYPE_CST_FALSE (isdigit, '0'-1); TEST_CTYPE_CST_FALSE (isdigit, '9'+1); TEST_CTYPE_CST_FALSE (isdigit, -1); TEST_CTYPE_CST_FALSE (isdigit, 0); TEST_CTYPE_CST_FALSE (isdigit, 255); TEST_CTYPE_CST_FALSE (isdigit, 256); TEST_CTYPE_CST_FALSE (isdigit, 10000); TEST_CTYPE_CST_FALSE (isdigit, __INT_MAX__); /* This ctype call should transform into another expression. */ if (isdigit(i) != ((unsigned)i - '0' <= 9)) link_failure_var(); #endif /* __OPTIMIZE__ */ } int main (void) { return 0; }