diff options
author | Jason Merrill <jason@redhat.com> | 2008-02-13 16:27:16 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2008-02-13 16:27:16 -0500 |
commit | 8d2eb30433ecedf4db7e00b62320973a587f4216 (patch) | |
tree | f0a53631f0a7643da1914e48d93b1ae0fd356267 /gcc | |
parent | 1b0c753a864e5d059a7cdd792b982b45cf4c9549 (diff) | |
download | gcc-8d2eb30433ecedf4db7e00b62320973a587f4216.zip gcc-8d2eb30433ecedf4db7e00b62320973a587f4216.tar.gz gcc-8d2eb30433ecedf4db7e00b62320973a587f4216.tar.bz2 |
PR c++/34962, c++/34937, c++/34939
PR c++/34962, c++/34937, c++/34939
* decl2.c (is_late_template_attribute): Always defer attributes
vector_size and weak.
From-SVN: r132297
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/tmplattr9.C | 25 |
3 files changed, 36 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 65bf623..38f9510 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2008-02-13 Jason Merrill <jason@redhat.com> + PR c++/34962, c++/34937, c++/34939 + * decl2.c (is_late_template_attribute): Always defer attributes + vector_size and weak. + PR c++/34774 * pt.c (value_dependent_expression_p): Look into DECL_INITIAL of enumerators, too. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 1832926..695390c 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -991,6 +991,13 @@ is_late_template_attribute (tree attr, tree decl) /* Unknown attribute. */ return false; + /* Attribute vector_size handling wants to dive into the back end array + building code, which breaks during template processing. */ + if (is_attribute_p ("vector_size", name) + /* Attribute weak handling wants to write out assembly right away. */ + || is_attribute_p ("weak", name)) + return true; + /* If any of the arguments are dependent expressions, we can't evaluate the attribute until instantiation time. */ for (arg = args; arg; arg = TREE_CHAIN (arg)) diff --git a/gcc/testsuite/g++.dg/ext/tmplattr9.C b/gcc/testsuite/g++.dg/ext/tmplattr9.C new file mode 100644 index 0000000..721ccef --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/tmplattr9.C @@ -0,0 +1,25 @@ +// PR c++/34937, 34962 +// { dg-options "" } + +struct A +{ + static const int i; +}; + +template<int> void foo() +{ + int x[A::i] __attribute((vector_size(8))); +} + +template<int> struct B +{ + enum { a, b = a }; + void bar(B<b>) __attribute((weak)); +}; + +void f() +{ + foo<0>(); + B<0> b; + b.bar (B<B<0>::b>()); +} |