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/12/06 02:36:43 UTC

[jira] Created: (STDCXX-677) IBM XLC++ 9.0/AIX 5.3] tr1/cstdint limit macros incompatible with system provided C headers

IBM XLC++ 9.0/AIX 5.3] tr1/cstdint limit macros incompatible with system provided C headers
-------------------------------------------------------------------------------------------

                 Key: STDCXX-677
                 URL: https://issues.apache.org/jira/browse/STDCXX-677
             Project: C++ Standard Library
          Issue Type: Bug
          Components: TR1.8 - C Compatibility
    Affects Versions: 4.2.0
            Reporter: Travis Vitek
            Assignee: Travis Vitek
             Fix For: 4.2.1


The following testcase fails to compile because both the C library stdint.h and our tr1/cstdint headers define defines the C99 limit macros. It looks like we need to avoid defining the macros if a previous definition already exists. Is that a sufficient solution? What if our defintion is different for some reason?

$ cat u.cpp && gmake u
#include <cstring>
#include <tr1/cstdint>

xlCcore -c -I/amd/devco/vitek/stdcxx/trunk/include/ansi -D_RWSTDDEBUG    -I/amd/devco/vitek/stdcxx/trunk/include -I/build/vitek/11s/include -I/amd/devco/vitek/stdcxx/trunk/tests/include  -g     -qtemplateregistry=u.ti u.cpp
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 56.11: 1540-0848 (S) The macro name "INT8_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 142.9: 1540-0425 (I) "INT8_MAX" is defined on line 142 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 57.11: 1540-0848 (S) The macro name "UINT8_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 149.9: 1540-0425 (I) "UINT8_MAX" is defined on line 149 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 116.11: 1540-0848 (S) The macro name "INT16_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 143.9: 1540-0425 (I) "INT16_MAX" is defined on line 143 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 117.11: 1540-0848 (S) The macro name "UINT16_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 150.9: 1540-0425 (I) "UINT16_MAX" is defined on line 150 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 171.13: 1540-0848 (S) The macro name "INT32_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 144.9: 1540-0425 (I) "INT32_MAX" is defined on line 144 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 172.13: 1540-0848 (S) The macro name "UINT32_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 151.9: 1540-0425 (I) "UINT32_MAX" is defined on line 151 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 225.13: 1540-0848 (S) The macro name "INT64_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 146.9: 1540-0425 (I) "INT64_MAX" is defined on line 146 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 226.13: 1540-0848 (S) The macro name "UINT64_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 153.9: 1540-0425 (I) "UINT64_MAX" is defined on line 153 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 323.9: 1540-0848 (S) The macro name "PTRDIFF_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 222.9: 1540-0425 (I) "PTRDIFF_MIN" is defined on line 222 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 324.9: 1540-0848 (S) The macro name "PTRDIFF_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 223.9: 1540-0425 (I) "PTRDIFF_MAX" is defined on line 223 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 326.9: 1540-0848 (S) The macro name "SIZE_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 246.9: 1540-0425 (I) "SIZE_MAX" is defined on line 246 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 328.9: 1540-0848 (S) The macro name "WCHAR_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 236.9: 1540-0425 (I) "WCHAR_MIN" is defined on line 236 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 329.9: 1540-0848 (S) The macro name "WCHAR_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 234.9: 1540-0425 (I) "WCHAR_MAX" is defined on line 234 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 331.9: 1540-0848 (S) The macro name "WINT_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 239.9: 1540-0425 (I) "WINT_MIN" is defined on line 239 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 332.9: 1540-0848 (S) The macro name "WINT_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 240.9: 1540-0425 (I) "WINT_MAX" is defined on line 240 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 334.9: 1540-0848 (S) The macro name "SIG_ATOMIC_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 226.9: 1540-0425 (I) "SIG_ATOMIC_MIN" is defined on line 226 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 335.9: 1540-0848 (S) The macro name "SIG_ATOMIC_MAX" is already defined with a different definition.
"/usr/include/stdint.h", line 227.9: 1540-0425 (I) "SIG_ATOMIC_MAX" is defined on line 227 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 339.9: 1540-0848 (S) The macro name "INT8_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 135.9: 1540-0425 (I) "INT8_MIN" is defined on line 135 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 340.9: 1540-0848 (S) The macro name "INT16_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 136.9: 1540-0425 (I) "INT16_MIN" is defined on line 136 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 341.9: 1540-0848 (S) The macro name "INT32_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 137.9: 1540-0425 (I) "INT32_MIN" is defined on line 137 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 342.9: 1540-0848 (S) The macro name "INT64_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 139.9: 1540-0425 (I) "INT64_MIN" is defined on line 139 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 344.9: 1540-0848 (S) The macro name "INT_LEAST8_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 156.9: 1540-0425 (I) "INT_LEAST8_MIN" is defined on line 156 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 345.9: 1540-0848 (S) The macro name "INT_LEAST16_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 157.9: 1540-0425 (I) "INT_LEAST16_MIN" is defined on line 157 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 346.9: 1540-0848 (S) The macro name "INT_LEAST32_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 158.9: 1540-0425 (I) "INT_LEAST32_MIN" is defined on line 158 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 347.9: 1540-0848 (S) The macro name "INT_LEAST64_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 160.9: 1540-0425 (I) "INT_LEAST64_MIN" is defined on line 160 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 349.9: 1540-0848 (S) The macro name "INT_FAST8_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 177.9: 1540-0425 (I) "INT_FAST8_MIN" is defined on line 177 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 350.9: 1540-0848 (S) The macro name "INT_FAST16_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 178.9: 1540-0425 (I) "INT_FAST16_MIN" is defined on line 178 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 351.9: 1540-0848 (S) The macro name "INT_FAST32_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 179.9: 1540-0425 (I) "INT_FAST32_MIN" is defined on line 179 of "/usr/include/stdint.h".
"/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 352.9: 1540-0848 (S) The macro name "INT_FAST64_MIN" is already defined with a different definition.
"/usr/include/stdint.h", line 181.9: 1540-0425 (I) "INT_FAST64_MIN" is defined on line 181 of "/usr/include/stdint.h".
gmake: *** [u.o] Error 1

$ grep "INT8_MAX" /usr/include/stdint.h
#define INT8_MAX        (127)
#define UINT8_MAX       (255U)
#define INT_LEAST8_MAX  INT8_MAX
#define UINT_LEAST8_MAX         UINT8_MAX
#define INT_FAST8_MAX   INT8_MAX
#define UINT_FAST8_MAX  UINT8_MAX

$ grep "INT8_MAX" /nfs/devco/vitek/stdcxx/trunk/include/tr1/cstdint 
#  define INT8_MAX          127
#  define UINT8_MAX         255U
#  define INT_LEAST8_MAX    INT8_MAX
#  define UINT_LEAST8_MAX   UINT8_MAX
#  define INT_FAST8_MAX     INT8_MAX
#  define UINT_FAST8_MAX    UINT8_MAX
#define INT8_MIN            _RWSTD_T_MIN (INT8_MAX)
$ 


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (STDCXX-677) [IBM XLC++ 9.0/AIX 5.3] tr1/cstdint limit macros incompatible with system provided C headers

Posted by "Martin Sebor (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/STDCXX-677?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12549248 ] 

Martin Sebor commented on STDCXX-677:
-------------------------------------

I agree that we should avoid interfering with the native C library if it defines these things.

The tr1/ subdirectory isn't supported (whatever that means in our world) and its contents will eventually (in 4.3 or later) be moved directly under include, when we enable at least partial support for C++ 0x. Until then, I suppose we can guard against the re-#definition of these macros in our <cstdint>.

> [IBM XLC++ 9.0/AIX 5.3] tr1/cstdint limit macros incompatible with system provided C headers
> --------------------------------------------------------------------------------------------
>
>                 Key: STDCXX-677
>                 URL: https://issues.apache.org/jira/browse/STDCXX-677
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: TR1.8 - C Compatibility
>    Affects Versions: 4.2.0
>            Reporter: Travis Vitek
>            Assignee: Travis Vitek
>             Fix For: 4.2.1
>
>
> The following testcase fails to compile because both the C library stdint.h and our tr1/cstdint headers define defines the C99 limit macros. It looks like we need to avoid defining the macros if a previous definition already exists. Is that a sufficient solution? What if our defintion is different for some reason?
> $ cat u.cpp && gmake u
> #include <cstring>
> #include <tr1/cstdint>
> xlCcore -c -I/amd/devco/vitek/stdcxx/trunk/include/ansi -D_RWSTDDEBUG    -I/amd/devco/vitek/stdcxx/trunk/include -I/build/vitek/11s/include -I/amd/devco/vitek/stdcxx/trunk/tests/include  -g     -qtemplateregistry=u.ti u.cpp
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 56.11: 1540-0848 (S) The macro name "INT8_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 142.9: 1540-0425 (I) "INT8_MAX" is defined on line 142 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 57.11: 1540-0848 (S) The macro name "UINT8_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 149.9: 1540-0425 (I) "UINT8_MAX" is defined on line 149 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 116.11: 1540-0848 (S) The macro name "INT16_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 143.9: 1540-0425 (I) "INT16_MAX" is defined on line 143 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 117.11: 1540-0848 (S) The macro name "UINT16_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 150.9: 1540-0425 (I) "UINT16_MAX" is defined on line 150 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 171.13: 1540-0848 (S) The macro name "INT32_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 144.9: 1540-0425 (I) "INT32_MAX" is defined on line 144 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 172.13: 1540-0848 (S) The macro name "UINT32_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 151.9: 1540-0425 (I) "UINT32_MAX" is defined on line 151 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 225.13: 1540-0848 (S) The macro name "INT64_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 146.9: 1540-0425 (I) "INT64_MAX" is defined on line 146 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 226.13: 1540-0848 (S) The macro name "UINT64_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 153.9: 1540-0425 (I) "UINT64_MAX" is defined on line 153 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 323.9: 1540-0848 (S) The macro name "PTRDIFF_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 222.9: 1540-0425 (I) "PTRDIFF_MIN" is defined on line 222 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 324.9: 1540-0848 (S) The macro name "PTRDIFF_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 223.9: 1540-0425 (I) "PTRDIFF_MAX" is defined on line 223 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 326.9: 1540-0848 (S) The macro name "SIZE_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 246.9: 1540-0425 (I) "SIZE_MAX" is defined on line 246 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 328.9: 1540-0848 (S) The macro name "WCHAR_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 236.9: 1540-0425 (I) "WCHAR_MIN" is defined on line 236 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 329.9: 1540-0848 (S) The macro name "WCHAR_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 234.9: 1540-0425 (I) "WCHAR_MAX" is defined on line 234 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 331.9: 1540-0848 (S) The macro name "WINT_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 239.9: 1540-0425 (I) "WINT_MIN" is defined on line 239 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 332.9: 1540-0848 (S) The macro name "WINT_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 240.9: 1540-0425 (I) "WINT_MAX" is defined on line 240 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 334.9: 1540-0848 (S) The macro name "SIG_ATOMIC_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 226.9: 1540-0425 (I) "SIG_ATOMIC_MIN" is defined on line 226 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 335.9: 1540-0848 (S) The macro name "SIG_ATOMIC_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 227.9: 1540-0425 (I) "SIG_ATOMIC_MAX" is defined on line 227 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 339.9: 1540-0848 (S) The macro name "INT8_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 135.9: 1540-0425 (I) "INT8_MIN" is defined on line 135 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 340.9: 1540-0848 (S) The macro name "INT16_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 136.9: 1540-0425 (I) "INT16_MIN" is defined on line 136 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 341.9: 1540-0848 (S) The macro name "INT32_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 137.9: 1540-0425 (I) "INT32_MIN" is defined on line 137 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 342.9: 1540-0848 (S) The macro name "INT64_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 139.9: 1540-0425 (I) "INT64_MIN" is defined on line 139 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 344.9: 1540-0848 (S) The macro name "INT_LEAST8_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 156.9: 1540-0425 (I) "INT_LEAST8_MIN" is defined on line 156 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 345.9: 1540-0848 (S) The macro name "INT_LEAST16_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 157.9: 1540-0425 (I) "INT_LEAST16_MIN" is defined on line 157 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 346.9: 1540-0848 (S) The macro name "INT_LEAST32_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 158.9: 1540-0425 (I) "INT_LEAST32_MIN" is defined on line 158 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 347.9: 1540-0848 (S) The macro name "INT_LEAST64_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 160.9: 1540-0425 (I) "INT_LEAST64_MIN" is defined on line 160 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 349.9: 1540-0848 (S) The macro name "INT_FAST8_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 177.9: 1540-0425 (I) "INT_FAST8_MIN" is defined on line 177 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 350.9: 1540-0848 (S) The macro name "INT_FAST16_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 178.9: 1540-0425 (I) "INT_FAST16_MIN" is defined on line 178 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 351.9: 1540-0848 (S) The macro name "INT_FAST32_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 179.9: 1540-0425 (I) "INT_FAST32_MIN" is defined on line 179 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 352.9: 1540-0848 (S) The macro name "INT_FAST64_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 181.9: 1540-0425 (I) "INT_FAST64_MIN" is defined on line 181 of "/usr/include/stdint.h".
> gmake: *** [u.o] Error 1
> $ grep "INT8_MAX" /usr/include/stdint.h
> #define INT8_MAX        (127)
> #define UINT8_MAX       (255U)
> #define INT_LEAST8_MAX  INT8_MAX
> #define UINT_LEAST8_MAX         UINT8_MAX
> #define INT_FAST8_MAX   INT8_MAX
> #define UINT_FAST8_MAX  UINT8_MAX
> $ grep "INT8_MAX" /nfs/devco/vitek/stdcxx/trunk/include/tr1/cstdint 
> #  define INT8_MAX          127
> #  define UINT8_MAX         255U
> #  define INT_LEAST8_MAX    INT8_MAX
> #  define UINT_LEAST8_MAX   UINT8_MAX
> #  define INT_FAST8_MAX     INT8_MAX
> #  define UINT_FAST8_MAX    UINT8_MAX
> #define INT8_MIN            _RWSTD_T_MIN (INT8_MAX)
> $ 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (STDCXX-677) [IBM XLC++ 9.0/AIX 5.3] tr1/cstdint limit macros incompatible with system provided C headers

Posted by "Travis Vitek (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/STDCXX-677?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Travis Vitek updated STDCXX-677:
--------------------------------

    Summary: [IBM XLC++ 9.0/AIX 5.3] tr1/cstdint limit macros incompatible with system provided C headers  (was: IBM XLC++ 9.0/AIX 5.3] tr1/cstdint limit macros incompatible with system provided C headers)

> [IBM XLC++ 9.0/AIX 5.3] tr1/cstdint limit macros incompatible with system provided C headers
> --------------------------------------------------------------------------------------------
>
>                 Key: STDCXX-677
>                 URL: https://issues.apache.org/jira/browse/STDCXX-677
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: TR1.8 - C Compatibility
>    Affects Versions: 4.2.0
>            Reporter: Travis Vitek
>            Assignee: Travis Vitek
>             Fix For: 4.2.1
>
>
> The following testcase fails to compile because both the C library stdint.h and our tr1/cstdint headers define defines the C99 limit macros. It looks like we need to avoid defining the macros if a previous definition already exists. Is that a sufficient solution? What if our defintion is different for some reason?
> $ cat u.cpp && gmake u
> #include <cstring>
> #include <tr1/cstdint>
> xlCcore -c -I/amd/devco/vitek/stdcxx/trunk/include/ansi -D_RWSTDDEBUG    -I/amd/devco/vitek/stdcxx/trunk/include -I/build/vitek/11s/include -I/amd/devco/vitek/stdcxx/trunk/tests/include  -g     -qtemplateregistry=u.ti u.cpp
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 56.11: 1540-0848 (S) The macro name "INT8_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 142.9: 1540-0425 (I) "INT8_MAX" is defined on line 142 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 57.11: 1540-0848 (S) The macro name "UINT8_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 149.9: 1540-0425 (I) "UINT8_MAX" is defined on line 149 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 116.11: 1540-0848 (S) The macro name "INT16_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 143.9: 1540-0425 (I) "INT16_MAX" is defined on line 143 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 117.11: 1540-0848 (S) The macro name "UINT16_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 150.9: 1540-0425 (I) "UINT16_MAX" is defined on line 150 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 171.13: 1540-0848 (S) The macro name "INT32_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 144.9: 1540-0425 (I) "INT32_MAX" is defined on line 144 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 172.13: 1540-0848 (S) The macro name "UINT32_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 151.9: 1540-0425 (I) "UINT32_MAX" is defined on line 151 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 225.13: 1540-0848 (S) The macro name "INT64_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 146.9: 1540-0425 (I) "INT64_MAX" is defined on line 146 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 226.13: 1540-0848 (S) The macro name "UINT64_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 153.9: 1540-0425 (I) "UINT64_MAX" is defined on line 153 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 323.9: 1540-0848 (S) The macro name "PTRDIFF_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 222.9: 1540-0425 (I) "PTRDIFF_MIN" is defined on line 222 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 324.9: 1540-0848 (S) The macro name "PTRDIFF_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 223.9: 1540-0425 (I) "PTRDIFF_MAX" is defined on line 223 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 326.9: 1540-0848 (S) The macro name "SIZE_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 246.9: 1540-0425 (I) "SIZE_MAX" is defined on line 246 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 328.9: 1540-0848 (S) The macro name "WCHAR_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 236.9: 1540-0425 (I) "WCHAR_MIN" is defined on line 236 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 329.9: 1540-0848 (S) The macro name "WCHAR_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 234.9: 1540-0425 (I) "WCHAR_MAX" is defined on line 234 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 331.9: 1540-0848 (S) The macro name "WINT_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 239.9: 1540-0425 (I) "WINT_MIN" is defined on line 239 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 332.9: 1540-0848 (S) The macro name "WINT_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 240.9: 1540-0425 (I) "WINT_MAX" is defined on line 240 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 334.9: 1540-0848 (S) The macro name "SIG_ATOMIC_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 226.9: 1540-0425 (I) "SIG_ATOMIC_MIN" is defined on line 226 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 335.9: 1540-0848 (S) The macro name "SIG_ATOMIC_MAX" is already defined with a different definition.
> "/usr/include/stdint.h", line 227.9: 1540-0425 (I) "SIG_ATOMIC_MAX" is defined on line 227 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 339.9: 1540-0848 (S) The macro name "INT8_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 135.9: 1540-0425 (I) "INT8_MIN" is defined on line 135 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 340.9: 1540-0848 (S) The macro name "INT16_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 136.9: 1540-0425 (I) "INT16_MIN" is defined on line 136 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 341.9: 1540-0848 (S) The macro name "INT32_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 137.9: 1540-0425 (I) "INT32_MIN" is defined on line 137 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 342.9: 1540-0848 (S) The macro name "INT64_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 139.9: 1540-0425 (I) "INT64_MIN" is defined on line 139 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 344.9: 1540-0848 (S) The macro name "INT_LEAST8_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 156.9: 1540-0425 (I) "INT_LEAST8_MIN" is defined on line 156 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 345.9: 1540-0848 (S) The macro name "INT_LEAST16_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 157.9: 1540-0425 (I) "INT_LEAST16_MIN" is defined on line 157 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 346.9: 1540-0848 (S) The macro name "INT_LEAST32_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 158.9: 1540-0425 (I) "INT_LEAST32_MIN" is defined on line 158 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 347.9: 1540-0848 (S) The macro name "INT_LEAST64_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 160.9: 1540-0425 (I) "INT_LEAST64_MIN" is defined on line 160 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 349.9: 1540-0848 (S) The macro name "INT_FAST8_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 177.9: 1540-0425 (I) "INT_FAST8_MIN" is defined on line 177 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 350.9: 1540-0848 (S) The macro name "INT_FAST16_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 178.9: 1540-0425 (I) "INT_FAST16_MIN" is defined on line 178 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 351.9: 1540-0848 (S) The macro name "INT_FAST32_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 179.9: 1540-0425 (I) "INT_FAST32_MIN" is defined on line 179 of "/usr/include/stdint.h".
> "/amd/devco/vitek/stdcxx/trunk/include/tr1/cstdint", line 352.9: 1540-0848 (S) The macro name "INT_FAST64_MIN" is already defined with a different definition.
> "/usr/include/stdint.h", line 181.9: 1540-0425 (I) "INT_FAST64_MIN" is defined on line 181 of "/usr/include/stdint.h".
> gmake: *** [u.o] Error 1
> $ grep "INT8_MAX" /usr/include/stdint.h
> #define INT8_MAX        (127)
> #define UINT8_MAX       (255U)
> #define INT_LEAST8_MAX  INT8_MAX
> #define UINT_LEAST8_MAX         UINT8_MAX
> #define INT_FAST8_MAX   INT8_MAX
> #define UINT_FAST8_MAX  UINT8_MAX
> $ grep "INT8_MAX" /nfs/devco/vitek/stdcxx/trunk/include/tr1/cstdint 
> #  define INT8_MAX          127
> #  define UINT8_MAX         255U
> #  define INT_LEAST8_MAX    INT8_MAX
> #  define UINT_LEAST8_MAX   UINT8_MAX
> #  define INT_FAST8_MAX     INT8_MAX
> #  define UINT_FAST8_MAX    UINT8_MAX
> #define INT8_MIN            _RWSTD_T_MIN (INT8_MAX)
> $ 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.