[PATCH] D59253: [AIX][libcxx] AIX system headers need stdint.h and inttypes.h to be re-enterable when macro _STD_TYPES_T is defined

Xing Xue via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue May 28 13:39:21 PDT 2019


xingxue marked an inline comment as done.
xingxue added inline comments.


================
Comment at: libcxx/include/stdint.h:16
+#endif // _STD_TYPES_T
 
 /*
----------------
hubert.reinterpretcast wrote:
> mclow.lists wrote:
> > I don't think that this will do what you want it to.
> > Is this a supported use case?
> > 
> > ```
> > #include <stdint.h>
> > #define _STD_TYPES_T
> > #include <stdint.h>
> > ```
> > 
> > 
> The comment is perhaps not clear. We need `<stdint.h>` to be re-enterable only as long as all previous inclusions have occurred while `_STD_TYPES_T` is defined. The effect of including `<stdint.h>` without defining `_STD_TYPES_T` is a strict superset of the effects of including `<stdint.h>` in other circumstances. Should we adjust the comment?
Updated comments as suggested. This patch helps scenarios such as the following on `AIX`.

 #include <sys/types.h>
 #include <stdint.h>

where `<sys/types.h>`  included in the first line defines macro `_STD_TYPES_T`, includes `<stdint.h>`, and then undefines `_STD_TYPES_T`. `<stdint.h>` included in the second line can be entered to get to macros such as `UINT32_MAX`. Since `_STD_TYPES_T` is undefined with the second inclusion, the header guard macro is defined and `<stdint.h>` is no longer re-enterable.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59253/new/

https://reviews.llvm.org/D59253





More information about the cfe-commits mailing list