From 59d2d2383485fb0febdcab9f06bbb3526eeab106 Mon Sep 17 00:00:00 2001 From: Cesar Philippidis Date: Tue, 27 Mar 2018 06:54:03 -0700 Subject: [PATCH] re PR target/85056 ([nvptx] wrong declaration of external arrays) PR target/85056 gcc/ * config/nvptx/nvptx.c (nvptx_assemble_decl_begin): Add '[]' to extern array declarations. gcc/testsuite/ * testsuite/gcc.target/nvptx/pr85056.c: New test. * testsuite/gcc.target/nvptx/pr85056a.c: New test. From-SVN: r258885 --- gcc/ChangeLog | 6 ++++++ gcc/config/nvptx/nvptx.c | 5 +++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.target/nvptx/pr85056.c | 20 ++++++++++++++++++++ gcc/testsuite/gcc.target/nvptx/pr85056a.c | 3 +++ 5 files changed, 40 insertions(+) create mode 100644 gcc/testsuite/gcc.target/nvptx/pr85056.c create mode 100644 gcc/testsuite/gcc.target/nvptx/pr85056a.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b670c5da8be..6799fdf967e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-03-27 Cesar Philippidis + + PR target/85056 + * config/nvptx/nvptx.c (nvptx_assemble_decl_begin): Add '[]' to + extern array declarations. + 2018-03-27 Richard Biener PR middle-ed/84067 diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index 1ba27e31ef0..b2b150f11d7 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -2033,6 +2033,9 @@ static void nvptx_assemble_decl_begin (FILE *file, const char *name, const char *section, const_tree type, HOST_WIDE_INT size, unsigned align) { + bool atype = (TREE_CODE (type) == ARRAY_TYPE) + && (TYPE_DOMAIN (type) == NULL_TREE); + while (TREE_CODE (type) == ARRAY_TYPE) type = TREE_TYPE (type); @@ -2072,6 +2075,8 @@ nvptx_assemble_decl_begin (FILE *file, const char *name, const char *section, /* We make everything an array, to simplify any initialization emission. */ fprintf (file, "[" HOST_WIDE_INT_PRINT_DEC "]", init_frag.remaining); + else if (atype) + fprintf (file, "[]"); } /* Called when the initializer for a decl has been completely output through diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 00f16535f22..dd1a7bce22d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-03-27 Cesar Philippidis + + PR target/85056 + * testsuite/gcc.target/nvptx/pr85056.c: New test. + * testsuite/gcc.target/nvptx/pr85056a.c: New test. + 2018-03-27 Richard Biener PR testsuite/82847 diff --git a/gcc/testsuite/gcc.target/nvptx/pr85056.c b/gcc/testsuite/gcc.target/nvptx/pr85056.c new file mode 100644 index 00000000000..fe7f8af856e --- /dev/null +++ b/gcc/testsuite/gcc.target/nvptx/pr85056.c @@ -0,0 +1,20 @@ +/* { dg-do run } */ +/* { dg-additional-sources "pr85056a.c" } */ + +extern void abort (); + +extern int a[]; + +int +main () +{ + int i, sum; + + for (i = 0; i < 10; i++) + sum += a[i]; + + if (sum != 55) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/nvptx/pr85056a.c b/gcc/testsuite/gcc.target/nvptx/pr85056a.c new file mode 100644 index 00000000000..a45a5f2b07f --- /dev/null +++ b/gcc/testsuite/gcc.target/nvptx/pr85056a.c @@ -0,0 +1,3 @@ +/* { dg-skip-if "" { *-*-* } } */ + +int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; -- 2.30.2