pgcc and gcc 4.5: Illegal use of symbol

Hi,

There seems to be a compatibility problem between pgcc and (latest) gcc 4.5.
I have seen it on openSUSE with pgi 7.2, 9.0, 10.4 - error output see below.
No problem with pgcc and gcc 4.3 on the same system.

Can this be fixed for gcc 4.5?
Or should I point in localrc to gcc 4.3 instead of gcc 4.5?


PGC-S-0040-Illegal use of symbol, __INT_LEAST8_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 60)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 60)
PGC-S-0040-Illegal use of symbol, __INT_LEAST16_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 61)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 61)
PGC-S-0040-Illegal use of symbol, __INT_LEAST32_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 62)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 62)
PGC-S-0040-Illegal use of symbol, __INT_LEAST64_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 63)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 63)
PGC-S-0040-Illegal use of symbol, __UINT_LEAST8_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 64)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 64)
PGC-S-0040-Illegal use of symbol, __UINT_LEAST16_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 65)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 65)
PGC-S-0040-Illegal use of symbol, __UINT_LEAST32_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 66)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 66)
PGC-S-0040-Illegal use of symbol, __UINT_LEAST64_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 67)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 67)
PGC-S-0040-Illegal use of symbol, __INT_FAST8_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 71)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 71)
PGC-S-0040-Illegal use of symbol, __INT_FAST16_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 72)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 72)
PGC-S-0040-Illegal use of symbol, __INT_FAST32_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 73)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 73)
PGC-S-0040-Illegal use of symbol, __INT_FAST64_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 74)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 74)
PGC-S-0040-Illegal use of symbol, __UINT_FAST8_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 75)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 75)
PGC-S-0040-Illegal use of symbol, __UINT_FAST16_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 76)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 76)
PGC-S-0040-Illegal use of symbol, __UINT_FAST32_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 77)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 77)
PGC-S-0040-Illegal use of symbol, __UINT_FAST64_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 78)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 78)
PGC-S-0040-Illegal use of symbol, __INTMAX_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 91)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 91)
PGC-S-0040-Illegal use of symbol, __UINTMAX_TYPE__ (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 92)
PGC-W-0156-Type not specified, 'int' assumed (/usr/lib64/gcc/x86_64-suse-linux/4.5/include/stdint-gcc.h: 92)
PGC-S-0040-Illegal use of symbol, uint8_t (./utf8proc.h: 251)
PGC-W-0156-Type not specified, 'int' assumed (./utf8proc.h: 251)
PGC-S-0035-Syntax error: Recovery attempted by replacing identifier uint8_t by typedef id .Z0000 (./utf8proc.h: 267)
PGC-S-0040-Illegal use of symbol, uint8_t (./utf8proc.h: 316)
PGC-W-0156-Type not specified, 'int' assumed (./utf8proc.h: 316)
PGC-S-0040-Illegal use of symbol, uint8_t (./utf8proc.h: 357)
PGC-W-0156-Type not specified, 'int' assumed (./utf8proc.h: 357)
PGC-S-0035-Syntax error: Recovery attempted by replacing identifier uint8_t by typedef id .Z0001 (./utf8proc.h: 357)
PGC-S-0040-Illegal use of symbol, uint8_t (./utf8proc.h: 375)
PGC-W-0156-Type not specified, 'int' assumed (./utf8proc.h: 375)
PGC-S-0040-Illegal use of symbol, uint8_t (./utf8proc.h: 375)
PGC-F-0008-Error limit exceeded (./utf8proc.h: 375)

Thanks,

Urs

Hi Urs,

Just an FYI that I’m looking into this but need to set-up system to use this version of GCC. My guess is that we’ll just need to make a few minor changes to our stdint.h file but until I can recreate the error, I can’t be sure.

I’ll keep you posted,
Mat

Hi Mat

thanks for looking into this!

Urs

Hi Urs,

It appears that these are new predefined gcc macros, meaning that they are defined internally by gcc and not in a system header file. This means we’ll need to add them to pgcc as well. I have added a feature request (TPR#17780).

In the short term, you might be able to add a definition for them in your source code, unfortunately, I don’t yet know to what values they should be set.

  • Mat

Hi Mat,

I guess in case the request will be accepted, the fix will be only provided for the latest pgcc version? And not for pgcc 7.x, 8.x etc. Is this correct?

OpenSUSE comes with gcc 4.5 and optional gcc 4.3 and 4.1. At the moment my lorcalrc file points to gcc 4.5

...
set GCCDIR=/usr/lib64/gcc/x86_64-suse-linux/4.5;
set GCCINC=/usr/lib64/gcc/x86_64-suse-linux/4.5/include;
set G77DIR=/usr/lib64/gcc/x86_64-suse-linux/4.5;
...

Would it make sense to install gcc 4.3 in addition to 4.5 and set

set GCCDIR=/usr/lib64/gcc/x86_64-suse-linux/4.3;
set GCCINC=/usr/lib64/gcc/x86_64-suse-linux/4.3/include;
set G77DIR=/usr/lib64/gcc/x86_64-suse-linux/4.3;

or should (could) I leave G77DIR unchanged and change only GCCDIR and GCCINC

set GCCDIR=/usr/lib64/gcc/x86_64-suse-linux/4.3;
set GCCINC=/usr/lib64/gcc/x86_64-suse-linux/4.3/include;
set G77DIR=/usr/lib64/gcc/x86_64-suse-linux/4.5;

What would you recommend?

Cheers,

Urs

I guess in case the request will be accepted, the fix will be only provided for the latest pgcc version? And not for pgcc 7.x, 8.x etc. Is this correct?

Correct.

What would you recommend?

Change all three to 4.3.

  • Mat

We got this fixed finally.

thanks,
dave