aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/attrib16.C8
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))));
+};