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