]> gcc.gnu.org Git - gcc.git/commitdiff
builtins.def: Add ctype builtins.
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>
Thu, 25 Mar 2004 17:55:13 +0000 (17:55 +0000)
committerKaveh Ghazi <ghazi@gcc.gnu.org>
Thu, 25 Mar 2004 17:55:13 +0000 (17:55 +0000)
* builtins.def: Add ctype builtins.
* doc/extend.texi: Likewise.
testsuite:
* gcc.dg/torture/builtin-ctype-1.c: New test.

From-SVN: r79960

gcc/ChangeLog
gcc/builtins.def
gcc/doc/extend.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/builtin-ctype-1.c [new file with mode: 0644]

index d314638bd73cfa3420a56efc84a6640bb8ef7357..071d0362e232660ea2678c3dd5942d51a3cf46ad 100644 (file)
@@ -1,3 +1,8 @@
+2004-03-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * builtins.def: Add ctype builtins.
+       * doc/extend.texi: Likewise.
+
 2004-03-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * builtins.c (fold_builtin): Add new builtin optimizations for
index 6148c41ade2621406d0b1134c5ffcca87dcd6232..24118ddf58e455d9d4171d82045e093dfe5ca20d 100644 (file)
@@ -491,6 +491,24 @@ DEF_C99_BUILTIN        (BUILT_IN_VSNPRINTF, "vsnprintf", BT_FN_INT_STRING_SIZE_C
 DEF_LIB_BUILTIN        (BUILT_IN_VSPRINTF, "vsprintf", BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
 DEF_C99_BUILTIN        (BUILT_IN_VSSCANF, "vsscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0)
 
+/* Category: ctype builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ISALNUM, "isalnum", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISALPHA, "isalpha", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISASCII, "isascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ISBLANK, "isblank", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISCNTRL, "iscntrl", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISDIGIT, "isdigit", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISGRAPH, "isgraph", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISLOWER, "islower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISPRINT, "isprint", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISPUNCT, "ispunct", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISSPACE, "isspace", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISUPPER, "isupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISXDIGIT, "isxdigit", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_TOASCII, "toascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_TOLOWER, "tolower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_TOUPPER, "toupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+
 /* Category: miscellaneous builtins.  */
 DEF_LIB_BUILTIN        (BUILT_IN_ABORT, "abort", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LIST)
 DEF_LIB_BUILTIN        (BUILT_IN_ABS, "abs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
index 37bbc5c17cda97acde95a4d9e1489fde9d3fd88f..9eb3b7c44b1665395da83f8fa101bf10e1d5aef8 100644 (file)
@@ -4886,6 +4886,19 @@ v4si f (v4si a, v4si b, v4si c)
 @findex ilogbl
 @findex imaxabs
 @findex index
+@findex isalnum
+@findex isalpha
+@findex isascii
+@findex isblank
+@findex iscntrl
+@findex isdigit
+@findex isgraph
+@findex islower
+@findex isprint
+@findex ispunct
+@findex isspace
+@findex isupper
+@findex isxdigit
 @findex j0
 @findex j0f
 @findex j0l
@@ -5026,6 +5039,9 @@ v4si f (v4si a, v4si b, v4si c)
 @findex tgamma
 @findex tgammaf
 @findex tgammal
+@findex toascii
+@findex tolower
+@findex toupper
 @findex trunc
 @findex truncf
 @findex truncl
@@ -5072,15 +5088,16 @@ Outside strict ISO C mode (@option{-ansi}, @option{-std=c89} or
 @code{drem}, @code{exp10f}, @code{exp10l}, @code{exp10}, @code{ffsll},
 @code{ffsl}, @code{ffs}, @code{fprintf_unlocked}, @code{fputs_unlocked},
 @code{gammaf}, @code{gammal}, @code{gamma}, @code{gettext},
-@code{index}, @code{j0f}, @code{j0l}, @code{j0}, @code{j1f}, @code{j1l},
-@code{j1}, @code{jnf}, @code{jnl}, @code{jn}, @code{mempcpy},
-@code{pow10f}, @code{pow10l}, @code{pow10}, @code{printf_unlocked},
-@code{rindex}, @code{scalbf}, @code{scalbl}, @code{scalb},
-@code{signbit}, @code{signbitf}, @code{signbitl},
+@code{index}, @code{isascii}, @code{j0f}, @code{j0l}, @code{j0},
+@code{j1f}, @code{j1l}, @code{j1}, @code{jnf}, @code{jnl}, @code{jn},
+@code{mempcpy}, @code{pow10f}, @code{pow10l}, @code{pow10},
+@code{printf_unlocked}, @code{rindex}, @code{scalbf}, @code{scalbl},
+@code{scalb}, @code{signbit}, @code{signbitf}, @code{signbitl},
 @code{significandf}, @code{significandl}, @code{significand},
 @code{sincosf}, @code{sincosl}, @code{sincos}, @code{stpcpy},
-@code{strdup}, @code{strfmon}, @code{y0f}, @code{y0l}, @code{y0},
-@code{y1f}, @code{y1l}, @code{y1}, @code{ynf}, @code{ynl} and @code{yn}
+@code{strdup}, @code{strfmon}, @code{toascii}, @code{y0f}, @code{y0l},
+@code{y0}, @code{y1f}, @code{y1l}, @code{y1}, @code{ynf}, @code{ynl} and
+@code{yn}
 may be handled as built-in functions.
 All these functions have corresponding versions
 prefixed with @code{__builtin_}, which may be used even in strict C89
@@ -5097,36 +5114,35 @@ The ISO C99 functions
 @code{catanl}, @code{catan}, @code{cbrtf}, @code{cbrtl}, @code{cbrt},
 @code{ccosf}, @code{ccoshf}, @code{ccoshl}, @code{ccosh}, @code{ccosl},
 @code{ccos}, @code{cexpf}, @code{cexpl}, @code{cexp}, @code{cimagf},
-@code{cimagl}, @code{cimag},
-@code{conjf}, @code{conjl}, @code{conj}, @code{copysignf},
-@code{copysignl}, @code{copysign}, @code{cpowf}, @code{cpowl},
-@code{cpow}, @code{cprojf}, @code{cprojl}, @code{cproj}, @code{crealf},
-@code{creall}, @code{creal}, @code{csinf}, @code{csinhf}, @code{csinhl},
-@code{csinh}, @code{csinl}, @code{csin}, @code{csqrtf}, @code{csqrtl},
-@code{csqrt}, @code{ctanf}, @code{ctanhf}, @code{ctanhl}, @code{ctanh},
-@code{ctanl}, @code{ctan}, @code{erfcf}, @code{erfcl}, @code{erfc},
-@code{erff}, @code{erfl}, @code{erf}, @code{exp2f}, @code{exp2l},
-@code{exp2}, @code{expm1f}, @code{expm1l}, @code{expm1}, @code{fdimf},
-@code{fdiml}, @code{fdim}, @code{fmaf}, @code{fmal}, @code{fmaxf},
-@code{fmaxl}, @code{fmax}, @code{fma}, @code{fminf}, @code{fminl},
-@code{fmin}, @code{hypotf}, @code{hypotl}, @code{hypot}, @code{ilogbf},
-@code{ilogbl}, @code{ilogb}, @code{imaxabs}, @code{lgammaf},
-@code{lgammal}, @code{lgamma}, @code{llabs}, @code{llrintf},
-@code{llrintl}, @code{llrint}, @code{llroundf}, @code{llroundl},
-@code{llround}, @code{log1pf}, @code{log1pl}, @code{log1p},
-@code{log2f}, @code{log2l}, @code{log2}, @code{logbf}, @code{logbl},
-@code{logb}, @code{lrintf}, @code{lrintl}, @code{lrint}, @code{lroundf},
-@code{lroundl}, @code{lround}, @code{nearbyintf}, @code{nearbyintl},
-@code{nearbyint}, @code{nextafterf}, @code{nextafterl},
-@code{nextafter}, @code{nexttowardf}, @code{nexttowardl},
-@code{nexttoward}, @code{remainderf}, @code{remainderl},
-@code{remainder}, @code{remquof}, @code{remquol}, @code{remquo},
-@code{rintf}, @code{rintl}, @code{rint}, @code{roundf}, @code{roundl},
-@code{round}, @code{scalblnf}, @code{scalblnl}, @code{scalbln},
-@code{scalbnf}, @code{scalbnl}, @code{scalbn}, @code{snprintf},
-@code{tgammaf}, @code{tgammal}, @code{tgamma}, @code{truncf},
-@code{truncl}, @code{trunc}, @code{vfscanf}, @code{vscanf},
-@code{vsnprintf} and @code{vsscanf}
+@code{cimagl}, @code{cimag}, @code{conjf}, @code{conjl}, @code{conj},
+@code{copysignf}, @code{copysignl}, @code{copysign}, @code{cpowf},
+@code{cpowl}, @code{cpow}, @code{cprojf}, @code{cprojl}, @code{cproj},
+@code{crealf}, @code{creall}, @code{creal}, @code{csinf}, @code{csinhf},
+@code{csinhl}, @code{csinh}, @code{csinl}, @code{csin}, @code{csqrtf},
+@code{csqrtl}, @code{csqrt}, @code{ctanf}, @code{ctanhf}, @code{ctanhl},
+@code{ctanh}, @code{ctanl}, @code{ctan}, @code{erfcf}, @code{erfcl},
+@code{erfc}, @code{erff}, @code{erfl}, @code{erf}, @code{exp2f},
+@code{exp2l}, @code{exp2}, @code{expm1f}, @code{expm1l}, @code{expm1},
+@code{fdimf}, @code{fdiml}, @code{fdim}, @code{fmaf}, @code{fmal},
+@code{fmaxf}, @code{fmaxl}, @code{fmax}, @code{fma}, @code{fminf},
+@code{fminl}, @code{fmin}, @code{hypotf}, @code{hypotl}, @code{hypot},
+@code{ilogbf}, @code{ilogbl}, @code{ilogb}, @code{imaxabs},
+@code{isblank}, @code{lgammaf}, @code{lgammal}, @code{lgamma},
+@code{llabs}, @code{llrintf}, @code{llrintl}, @code{llrint},
+@code{llroundf}, @code{llroundl}, @code{llround}, @code{log1pf},
+@code{log1pl}, @code{log1p}, @code{log2f}, @code{log2l}, @code{log2},
+@code{logbf}, @code{logbl}, @code{logb}, @code{lrintf}, @code{lrintl},
+@code{lrint}, @code{lroundf}, @code{lroundl}, @code{lround},
+@code{nearbyintf}, @code{nearbyintl}, @code{nearbyint},
+@code{nextafterf}, @code{nextafterl}, @code{nextafter},
+@code{nexttowardf}, @code{nexttowardl}, @code{nexttoward},
+@code{remainderf}, @code{remainderl}, @code{remainder}, @code{remquof},
+@code{remquol}, @code{remquo}, @code{rintf}, @code{rintl}, @code{rint},
+@code{roundf}, @code{roundl}, @code{round}, @code{scalblnf},
+@code{scalblnl}, @code{scalbln}, @code{scalbnf}, @code{scalbnl},
+@code{scalbn}, @code{snprintf}, @code{tgammaf}, @code{tgammal},
+@code{tgamma}, @code{truncf}, @code{truncl}, @code{trunc},
+@code{vfscanf}, @code{vscanf}, @code{vsnprintf} and @code{vsscanf}
 are handled as built-in functions
 except in strict ISO C90 mode (@option{-ansi} or @option{-std=c89}).
 
@@ -5148,16 +5164,19 @@ The ISO C90 functions
 @code{abort}, @code{abs}, @code{acos}, @code{asin}, @code{atan2},
 @code{atan}, @code{calloc}, @code{ceil}, @code{cosh}, @code{cos},
 @code{exit}, @code{exp}, @code{fabs}, @code{floor}, @code{fmod},
-@code{fprintf}, @code{fputs}, @code{frexp}, @code{fscanf}, @code{labs},
-@code{ldexp}, @code{log10}, @code{log}, @code{malloc}, @code{memcmp},
-@code{memcpy}, @code{memset}, @code{modf}, @code{pow}, @code{printf},
-@code{putchar}, @code{puts}, @code{scanf}, @code{sinh}, @code{sin},
-@code{snprintf}, @code{sprintf}, @code{sqrt}, @code{sscanf},
-@code{strcat}, @code{strchr}, @code{strcmp}, @code{strcpy},
-@code{strcspn}, @code{strlen}, @code{strncat}, @code{strncmp},
-@code{strncpy}, @code{strpbrk}, @code{strrchr}, @code{strspn},
-@code{strstr}, @code{tanh}, @code{tan}, @code{vfprintf}, @code{vprintf}
-and @code{vsprintf}
+@code{fprintf}, @code{fputs}, @code{frexp}, @code{fscanf},
+@code{isalnum}, @code{isalpha}, @code{iscntrl}, @code{isdigit},
+@code{isgraph}, @code{islower}, @code{isprint}, @code{ispunct},
+@code{isspace}, @code{isupper}, @code{isxdigit}, @code{tolower},
+@code{toupper}, @code{labs}, @code{ldexp}, @code{log10}, @code{log},
+@code{malloc}, @code{memcmp}, @code{memcpy}, @code{memset}, @code{modf},
+@code{pow}, @code{printf}, @code{putchar}, @code{puts}, @code{scanf},
+@code{sinh}, @code{sin}, @code{snprintf}, @code{sprintf}, @code{sqrt},
+@code{sscanf}, @code{strcat}, @code{strchr}, @code{strcmp},
+@code{strcpy}, @code{strcspn}, @code{strlen}, @code{strncat},
+@code{strncmp}, @code{strncpy}, @code{strpbrk}, @code{strrchr},
+@code{strspn}, @code{strstr}, @code{tanh}, @code{tan}, @code{vfprintf},
+@code{vprintf} and @code{vsprintf}
 are all recognized as built-in functions unless
 @option{-fno-builtin} is specified (or @option{-fno-builtin-@var{function}}
 is specified for an individual function).  All of these functions have
index afbf937c80b4305fbc7f215c97279bbc333e57e2..7e44e7e0847df03d426078535b7e39132b9a5fb0 100644 (file)
@@ -1,3 +1,7 @@
+2004-03-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * gcc.dg/torture/builtin-ctype-1.c: New test.
+
 2004-03-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * gcc.dg/torture/builtin-explog-1.c: Add new cases.
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-ctype-1.c b/gcc/testsuite/gcc.dg/torture/builtin-ctype-1.c
new file mode 100644 (file)
index 0000000..ad6fc1c
--- /dev/null
@@ -0,0 +1,44 @@
+/* Copyright (C) 2004  Free Software Foundation.
+
+   Verify that built-in ctype function attributes are correctly set by
+   the compiler.
+
+   Written by Kaveh Ghazi, 2004-03-23.  */
+
+/* { dg-do link } */
+
+
+void test(int i)
+{
+  /* All of these ctype functions should be const/pure and thus
+     eliminated.  */
+#define TEST_CTYPE(FN) \
+  extern int FN(int); \
+  extern void link_failure_##FN(void); \
+  if (FN(i) != FN(i)) \
+    link_failure_##FN()
+  
+#ifdef __OPTIMIZE__
+  TEST_CTYPE(isalnum);
+  TEST_CTYPE(isalpha);
+  TEST_CTYPE(isascii);
+  TEST_CTYPE(isblank);
+  TEST_CTYPE(iscntrl);
+  TEST_CTYPE(isdigit);
+  TEST_CTYPE(isgraph);
+  TEST_CTYPE(islower);
+  TEST_CTYPE(isprint);
+  TEST_CTYPE(ispunct);
+  TEST_CTYPE(isspace);
+  TEST_CTYPE(isupper);
+  TEST_CTYPE(isxdigit);
+  TEST_CTYPE(toascii);
+  TEST_CTYPE(tolower);
+  TEST_CTYPE(toupper);
+#endif /* __OPTIMIZE__ */
+}
+
+int main (void)
+{
+  return 0;
+}
This page took 0.081643 seconds and 5 git commands to generate.