You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by "Travis Vitek (JIRA)" <ji...@apache.org> on 2007/09/07 23:07:31 UTC
[jira] Commented: (STDCXX-436) [Linux] MB_LEN_MAX incorrect
[ https://issues.apache.org/jira/browse/STDCXX-436?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12525833 ]
Travis Vitek commented on STDCXX-436:
-------------------------------------
I have one comment on this. Here is a quick summary of the problem.
1. t.cpp includes <limits.h> which is actually our include/ansi/limits.h
2. include/ansi/limits.h includes the gcc modified limits.h
3. gcc modified limits.h attempts to use #include_next to include /usr/include/limits.h, but this actually gets include/ansi/limits.h again, which is a no-op because of the header guards.
The following is evidence of the include issue...
[vitek@robot] 623 % cat t.cpp
#include <limits.h>
int main() { return 0; }
[vitek@robot] 623 % g++ -H t.cpp
. /amd/packages/mdx/redhat/em64t/compilers/gcc/3.4.6-3/bin/../lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h
.. /amd/packages/mdx/redhat/em64t/compilers/gcc/3.4.6-3/bin/../lib/gcc/x86_64-redhat-linux/3.4.6/include/syslimits.h
... /amd/packages/mdx/redhat/em64t/compilers/gcc/3.4.6-3/bin/../lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h
.... /usr/include/limits.h
..... /usr/include/features.h
...... /usr/include/sys/cdefs.h
...... /usr/include/gnu/stubs.h
..... /usr/include/bits/posix1_lim.h
...... /usr/include/bits/local_lim.h
....... /usr/include/linux/limits.h
..... /usr/include/bits/posix2_lim.h
..... /usr/include/bits/xopen_lim.h
...... /usr/include/bits/stdio_lim.h
[vitek@robot] 624 % gmake CPPOPTS="-H" t
gcc -c -I/amd/devco/vitek/stdcxx/trunk/include/ansi -D_RWSTDDEBUG -pthread -I/amd/devco/vitek/stdcxx/trunk/include -I/nfs/devbuild/vitek/stdcxx/gcc-346/2007-09-07/include -I/amd/devco/vitek/stdcxx/trunk/tests/include -H -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align t.cpp
. /amd/devco/vitek/stdcxx/trunk/include/ansi/limits.h
.. /amd/devco/vitek/stdcxx/trunk/include/rw/_defs.h
... /amd/devco/vitek/stdcxx/trunk/include/rw/_config.h
.... /nfs/devbuild/vitek/stdcxx/gcc-346/2007-09-07/include/config.h
.... /amd/devco/vitek/stdcxx/trunk/include/rw/_config-gcc.h
.. /amd/packages/mdx/redhat/em64t/compilers/gcc/3.4.6-3/bin/../lib/gcc/x86_64-redhat-linux/3.4.6/include/../include/limits.h
... /amd/packages/mdx/redhat/em64t/compilers/gcc/3.4.6-3/bin/../lib/gcc/x86_64-redhat-linux/3.4.6/include/../include/syslimits.h
.... /amd/devco/vitek/stdcxx/trunk/include/ansi/limits.h
So the problem that I see with the workaround for this issue is that anything included from /usr/include/limits.h is not seen when building using our headers. This would cause problems for a user program that depends on macros, functions, or types declared to be included from /usr/include/limits.h such as this one,
#include <limits.h>
int main ()
{
char host [HOST_NAME_MAX];
return 0;
}
> [Linux] MB_LEN_MAX incorrect
> ----------------------------
>
> Key: STDCXX-436
> URL: https://issues.apache.org/jira/browse/STDCXX-436
> Project: C++ Standard Library
> Issue Type: Bug
> Components: 18. Language Support
> Affects Versions: 4.1.3
> Environment: gcc version 4.1.1 20070105 (Red Hat 4.1.1-51)
> Reporter: Mark Brown
> Assignee: Travis Vitek
> Priority: Critical
> Fix For: 4.2
>
> Attachments: stdcxx-436.patch
>
>
> On my Linux system MB_LEN_MAX is normally defined to 16 but when I use the macro in a program compiled with stdcxx the macro evaluates to 1. The test case goes like this:
> $ cat test.cpp && make CPPOPTS="-DGETCONF_MB_LEN_MAX=`getconf MB_LEN_MAX`" test && ./test
> #include <assert.h>
> #include <limits.h>
> int main ()
> {
> assert (MB_LEN_MAX == GETCONF_MB_LEN_MAX);
> }
> gcc -c -I/home/mbrown/stdcxx/include/ansi -D_RWSTDDEBUG -I/home/mbrown/stdcxx/include -I/home/mbrown/stdcxx-gcc-4.1.1-11s/include -I/home/mbrown/stdcxx/examples/include -DGETCONF_MB_LEN_MAX=16 -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align test.cpp
> gcc u.o -o u -L/home/mbrown/stdcxx-gcc-4.1.1-11s/lib -lstd11s -lsupc++ -lm
> test: test.cpp:6: int main(): Assertion `1 == 16' failed.
> Aborted
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.