diff options
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/attrib16.C | 8 |
4 files changed, 23 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7fef9fb..ebd8705 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-10-16 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + PR c++/10479 + * parser.c (cp_parser_parenthesized_expression_list): Fold + non-dependent expressions in attribute lists. + 2004-10-15 Mark Mitchell <mark@codesourcery.com> PR c++/17042 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 611a794..7673826 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -4420,6 +4420,7 @@ cp_parser_parenthesized_expression_list (cp_parser* parser, bool *non_constant_p) { tree expression_list = NULL_TREE; + bool fold_expr_p = is_attribute_list; tree identifier = NULL_TREE; /* Assume all the expressions will be constant. */ @@ -4462,6 +4463,9 @@ cp_parser_parenthesized_expression_list (cp_parser* parser, else expr = cp_parser_assignment_expression (parser); + if (fold_expr_p) + expr = fold_non_dependent_expr (expr); + /* Add it to the list. We add error_mark_node expressions to the list, so that we can still tell if the correct form for a parenthesized expression-list diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a9ec7d7..0ca8452 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-10-16 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + PR c++/10479 + * g++.dg/ext/attrib16.C: New test. + 2004-10-15 Mark Mitchell <mark@codesourcery.com> PR c++/17042 diff --git a/gcc/testsuite/g++.dg/ext/attrib16.C b/gcc/testsuite/g++.dg/ext/attrib16.C new file mode 100644 index 0000000..2e73fca --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib16.C @@ -0,0 +1,8 @@ +// { dg-do compile } +// Origin: <rguenth at tat dot physik dot uni-tuebingen dot de> +// PR c++/10479: use of non dependent expressions in attributes in templates + +template <int i> +struct foo2 { + float bar __attribute__((aligned(__alignof__(double)))); +}; |