[Bug libstdc++/97044] Undefined format macros because of include order on AIX

2020-09-21 Thread clement.chigot at atos dot net
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97044

Clément Chigot  changed:

   What|Removed |Added

 CC||dje at gcc dot gnu.org

--- Comment #3 from Clément Chigot  ---
Alright, with David, we came to the same conclusion. Sadly, fixing headers on
AIX will take time and will happen only on newest versions. Thus, using
fixincludes seems the right approach for now. 

Thanks for the explanation.

[Bug libstdc++/97044] New: Undefined format macros because of include order on AIX

2020-09-14 Thread clement.chigot at atos dot net
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97044

Bug ID: 97044
   Summary: Undefined format macros because of include order on
AIX
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: clement.chigot at atos dot net
  Target Milestone: ---

On AIX, C++ format macros like "PRIu32" might not be defined even if
"cinttypes" is included. It happends when other headers which have a dependency
on "inttypes.h" are included before. 
On AIX, __STDC_FORMAT_MACROS must be defined before "sys/inttypes.h" is
included in order to have these macros defined. But with for example ,
as "string.h" includes "sys/types" which included "sys/inttypes.h",
__STDC_FORMAT_MACROS won't be defined when "sys/inttypes.h" is first included
thus the format macros won't be defined. 

This program works on Linux but not on AIX. 
#include 
#include 
#include 

int main(){
#ifdef PRIu32
  std::cout << "PRIu32 defined" << std::endl;
#else
  std::cout << "PRIu32 not defined" << std::endl;
#endif
}

My question is what are the G++ standards saying on that ? Should 
always defined "PRIu32"-like macros ? Or does the developers should be careful
the order when are included the headers or always add -D__STDC_FORMAT_MACROS ?  

I would clearly go for one. Especially, because knowing that "#include
" must be after "#include " if you want to use "PRIu32" is 
not obvious. 

Clément