You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2008/07/07 18:41:53 UTC
svn commit: r674550 - in /stdcxx/branches/4.2.x: include/ansi/limits.h
tests/regress/18.c.limits.stdcxx-988.cpp
Author: sebor
Date: Mon Jul 7 09:41:50 2008
New Revision: 674550
URL: http://svn.apache.org/viewvc?rev=674550&view=rev
Log:
2008-07-07 Martin Sebor <se...@roguewave.com>
STDCXX-988
* include/ansi/limits.h [__GNUG__]: Used #include_next twice to coax
gcc's <limits.h> to pull in the system <limits.h> in order to #define
POSIX ans system macros.
* tests/regress/18.c.limits.stdcxx-988.cpp: Regression test for
STDCXX-988. Tested with gcc 4.1.2 and EDG eccp 3.9 on Fedora 8.
Added:
stdcxx/branches/4.2.x/tests/regress/18.c.limits.stdcxx-988.cpp (with props)
Modified:
stdcxx/branches/4.2.x/include/ansi/limits.h
Modified: stdcxx/branches/4.2.x/include/ansi/limits.h
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/include/ansi/limits.h?rev=674550&r1=674549&r2=674550&view=diff
==============================================================================
--- stdcxx/branches/4.2.x/include/ansi/limits.h (original)
+++ stdcxx/branches/4.2.x/include/ansi/limits.h Mon Jul 7 09:41:50 2008
@@ -107,7 +107,12 @@
# endif
# ifdef __GNUC__
- // use the gcc extension to #include the compiler's limits.h
+ // use the gcc extension to #include the compiler's <limits.h>
+# include_next <limits.h>
+
+ // include the same file again to get it to #include the system
+ // <limits.h> (presumably residing /usr/include/)
+# define _GCC_NEXT_LIMITS_H
# include_next <limits.h>
# else
# include _RWSTD_ANSI_C_LIMITS_H
Added: stdcxx/branches/4.2.x/tests/regress/18.c.limits.stdcxx-988.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/tests/regress/18.c.limits.stdcxx-988.cpp?rev=674550&view=auto
==============================================================================
--- stdcxx/branches/4.2.x/tests/regress/18.c.limits.stdcxx-988.cpp (added)
+++ stdcxx/branches/4.2.x/tests/regress/18.c.limits.stdcxx-988.cpp Mon Jul 7 09:41:50 2008
@@ -0,0 +1,163 @@
+/************************************************************************
+ *
+ * 18.c.limits.stdcxx-988.cpp - regression test for STDCXX-988
+ *
+ * http://issues.apache.org/jira/browse/STDCXX-988
+ *
+ * $Id$
+ *
+ ***************************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ **************************************************************************/
+
+#include <cassert>
+#include <limits.h>
+
+int main ()
+{
+#if (defined __unix__ || defined __unix || defined unix) \
+ && !defined _RWSTD_EDG_ECCP
+
+ // According to POSIX (SUSv3), the following macros are required
+ // to be defined in <limits.h> (others, such as OPEN_MAX) are
+ // optional):
+ // http://www.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html
+
+ // Runtime Increasable Values
+
+ // The magnitude limitations in the following list shall be fixed
+ // by specific implementations. An application should assume that
+ // the value supplied by <limits.h> in a specific implementation
+ // is the minimum that pertains whenever the application is run
+ // under that implementation. A specific instance of a specific
+ // implementation may increase the value relative to that supplied
+ // by <limits.h> for that implementation. The actual value supported
+ // by a specific instance shall be provided by the sysconf() function.
+
+ assert (BC_BASE_MAX != 0 /* >= _POSIX2_BC_BASE_MAX */ );
+ assert (BC_DIM_MAX != 0 /* >= _POSIX2_BC_DIM_MAX */ );
+ assert (BC_SCALE_MAX != 0 /* >= _POSIX2_BC_SCALE_MAX */ );
+ assert (BC_STRING_MAX != 0 /* >= _POSIX2_BC_STRING_MAX */ );
+ assert (CHARCLASS_NAME_MAX != 0 /* >= _POSIX2_CHARCLASS_NAME_MAX */ );
+ assert (COLL_WEIGHTS_MAX != 0 /* >= _POSIX2_COLL_WEIGHTS_MAX */ );
+ assert (EXPR_NEST_MAX != 0 /* >= _POSIX2_EXPR_NEST_MAX */ );
+ assert (LINE_MAX != 0 /* >= _POSIX2_LINE_MAX */ );
+ assert (NGROUPS_MAX != 0 /* >= _POSIX_NGROUPS_MAX */ );
+ assert (RE_DUP_MAX != 0 /* >= _POSIX2_RE_DUP_MAX */ );
+
+ // Minimum Values
+
+ // The symbolic constants in the following list shall be defined
+ // in <limits.h> with the values shown. These are symbolic names
+ // for the most restrictive value for certain features on an
+ // implementation conforming to this volume of IEEE Std 1003.1-2001.
+ // Related symbolic constants are defined elsewhere in this volume
+ // of IEEE Std 1003.1-2001 which reflect the actual implementation
+ // and which need not be as restrictive. A conforming implementation
+ // shall provide values at least this large. A strictly conforming
+ // application must not require a larger value for correct operation.
+
+ assert (_POSIX_ARG_MAX == 4096);
+ assert (_POSIX_CHILD_MAX == 25);
+ assert (_POSIX_HOST_NAME_MAX == 255);
+ assert (_POSIX_LINK_MAX == 8);
+ assert (_POSIX_LOGIN_NAME_MAX == 9);
+ assert (_POSIX_MAX_CANON == 255);
+ assert (_POSIX_MAX_INPUT == 255);
+ assert (_POSIX_NAME_MAX == 14);
+ assert (_POSIX_NGROUPS_MAX == 8);
+ assert (_POSIX_OPEN_MAX == 20);
+ assert (_POSIX_PATH_MAX == 256);
+ assert (_POSIX_PIPE_BUF == 512);
+ assert (_POSIX_RE_DUP_MAX == 255);
+ assert (_POSIX_SSIZE_MAX == 32767);
+ assert (_POSIX_STREAM_MAX == 8);
+ assert (_POSIX_SYMLINK_MAX == 255);
+ assert (_POSIX_SYMLOOP_MAX == 8);
+ assert (_POSIX_TTY_NAME_MAX == 9);
+ assert (_POSIX_TZNAME_MAX == 6);
+
+# ifdef _POSIX2_VERSION
+
+ assert (_POSIX2_BC_BASE_MAX == 99);
+ assert (_POSIX2_BC_DIM_MAX == 2048);
+ assert (_POSIX2_BC_SCALE_MAX == 99);
+ assert (_POSIX2_BC_STRING_MAX == 1000);
+ assert (_POSIX2_CHARCLASS_NAME_MAX == 14);
+ assert (_POSIX2_COLL_WEIGHTS_MAX == 2);
+ assert (_POSIX2_EXPR_NEST_MAX == 32);
+ assert (_POSIX2_LINE_MAX == 2048);
+ assert (_POSIX2_RE_DUP_MAX == 255);
+
+# endif // _POSIX2_VERSION
+
+#endif // UNIX && !EDG eccp
+
+ // Numerical Limits
+
+ // The values in the following lists shall be defined in <limits.h>
+ // and are constant expressions suitable for use in #if preprocessing
+ // directives. Moreover, except for {CHAR_BIT}, {DBL_DIG}, {DBL_MAX},
+ // {FLT_DIG}, {FLT_MAX}, {LONG_BIT}, {WORD_BIT}, and {MB_LEN_MAX},
+ // the symbolic names are defined as expressions of the correct type.
+
+ // If the value of an object of type char is treated as a signed
+ // integer when used in an expression, the value of {CHAR_MIN} is
+ // the same as that of {SCHAR_MIN} and the value of {CHAR_MAX} is
+ // the same as that of {SCHAR_MAX}. Otherwise, the value of
+ // {CHAR_MIN} is 0 and the value of {CHAR_MAX} is the same as that
+ // of {UCHAR_MAX}.
+
+ assert (CHAR_BIT == 8);
+ assert (CHAR_MAX == UCHAR_MAX || CHAR_MAX == SCHAR_MAX);
+ assert (CHAR_MIN == SCHAR_MIN || CHAR_MIN == 0);
+ assert (INT_MAX >= 2147483647);
+ assert (LONG_MAX >= +2147483647);
+ assert (MB_LEN_MAX >= 1);
+ assert (SCHAR_MAX == +127);
+ assert (SHRT_MAX >= +32767);
+
+#ifndef _RWSTD_EDG_ECCP
+
+ // avoid exercising with the EDG eccp front end (strict mode)
+ assert (LONG_BIT >= 32);
+ assert (SSIZE_MAX >= _POSIX_SSIZE_MAX);
+ assert (WORD_BIT >= 32);
+
+#endif // EDG eccp
+
+ assert (UCHAR_MAX >= 255);
+ assert (UINT_MAX >= 4294967295);
+ assert (ULONG_MAX >= 4294967295);
+ assert (USHRT_MAX >= 65535);
+ assert (INT_MIN <= -2147483647);
+ assert (LONG_MIN != 0);
+ assert (SCHAR_MIN == -128);
+ assert (SHRT_MIN != 0);
+
+#ifndef _RWSTD_NO_LONG_LONG
+
+ assert (LLONG_MIN != 0);
+ assert (LLONG_MAX >= +9223372036854775807LL);
+ assert (ULLONG_MAX >= 18446744073709551615ULL);
+
+#endif // _RWSTD_NO_LONG_LONG
+
+ return 0;
+}
Propchange: stdcxx/branches/4.2.x/tests/regress/18.c.limits.stdcxx-988.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: stdcxx/branches/4.2.x/tests/regress/18.c.limits.stdcxx-988.cpp
------------------------------------------------------------------------------
svn:keywords = Id