diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 12139e1d86279ca25f6e9e001b752fc705de7021..7ab73f1031d7d42e79eb1970c9fa256681a8b31b 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -13317,9 +13317,8 @@ grokdeclarator (const cp_declarator *declarator, /* [dcl.array]/1: The optional attribute-specifier-seq appertains to the - array. */ - returned_attrs = attr_chainon (returned_attrs, - declarator->std_attributes); + array type. */ + decl_attributes (&type, declarator->std_attributes, 0); break; case cdk_function: diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-82.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-82.C new file mode 100644 index 0000000000000000000000000000000000000000..67c1a209843044375a44dfb5962fd25c55bb9a74 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-82.C @@ -0,0 +1,4 @@ +// { dg-do compile { target c++11 } } + +int a [[gnu::common]] [2]; +int b[2] [[gnu::common]]; // { dg-warning "'common' attribute does not apply to types" } diff --git a/gcc/testsuite/g++.dg/gomp/attrs-3.C b/gcc/testsuite/g++.dg/gomp/attrs-3.C index 7aab6370d499d282dfd9dd1f20056d133d413981..5658b3a868954616f1593b7368fbba31a7ff9690 100644 --- a/gcc/testsuite/g++.dg/gomp/attrs-3.C +++ b/gcc/testsuite/g++.dg/gomp/attrs-3.C @@ -35,6 +35,7 @@ foo () int *[[omp::directive (threadprivate (t3))]] c; // { dg-warning "'omp::directive' scoped attribute directive ignored" } int &[[omp::directive (threadprivate (t4))]] d = b; // { dg-warning "'omp::directive' scoped attribute directive ignored" } typedef int T [[omp::directive (threadprivate (t5))]]; // { dg-error "'omp::directive' not allowed to be specified in this context" } - int e[10] [[omp::directive (threadprivate (t6))]]; // { dg-error "'omp::directive' not allowed to be specified in this context" } + int e [[omp::directive (threadprivate (t6))]] [10]; // { dg-error "'omp::directive' not allowed to be specified in this context" } + int f[10] [[omp::directive (threadprivate (t6))]]; // { dg-warning "'omp::directive' scoped attribute directive ignored" } struct [[omp::directive (threadprivate (t7))]] S {}; // { dg-error "'omp::directive' not allowed to be specified in this context" } }