https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85056
Bug ID: 85056 Summary: [nvptx] wrong declaration of external arrays Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: cesar at gcc dot gnu.org Target Milestone: --- Created attachment 43743 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=43743&action=edit test case The attached test case consists of two files, one containing a definition of an array 'a', and another using it. To build the program, just run `nvptx-run -O2 main.c extern.c`. nvptx-run reports the following error: error : Size doesn't match for 'a' in 'input file 2 at offset 2882', first specified in 'input file 1 at offset 2171' There's something wrong with the way that 'a' is being declared for for main. GCC emitting the declaration as // BEGIN GLOBAL VAR DECL: a .extern .global .align 4 .u32 a; But that is really declaring variable 'a' as an integer of size four bytes. Variable 'a' should be declared as: // BEGIN GLOBAL VAR DECL: a .extern .global .align 4 .u32 a[]; Note the additional [] after a. I was able to reproduce this problem using CUDA 9 / Nvidia driver 390.42 on an sm_60 GPU using trunk and openacc-gcc-7-branch.