diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/parser.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/alignof2.C | 7 |
4 files changed, 31 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 872cd06..62b7d8d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-12-22 Rodrigo Rivas Costa <rodrigorivascosta@gmail.com> + + * parser.c (cp_parser_unary_expression): Call pedwarn for alignof + with expression. + 2010-12-18 Nicola Pero <nicola.pero@meta-innovation.com> * parser.c (cp_parser_objc_try_catch_finally_statement): Call diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 1a2d425..743d774 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -5888,6 +5888,7 @@ cp_parser_pseudo_destructor_name (cp_parser* parser, unary-operator cast-expression sizeof unary-expression sizeof ( type-id ) + alignof ( type-id ) [C++0x] new-expression delete-expression @@ -5897,6 +5898,7 @@ cp_parser_pseudo_destructor_name (cp_parser* parser, __extension__ cast-expression __alignof__ unary-expression __alignof__ ( type-id ) + alignof unary-expression [C++0x] __real__ cast-expression __imag__ cast-expression && identifier @@ -5938,7 +5940,19 @@ cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p, if (TYPE_P (operand)) return cxx_sizeof_or_alignof_type (operand, op, true); else - return cxx_sizeof_or_alignof_expr (operand, op, true); + { + /* ISO C++ defines alignof only with types, not with + expressions. So pedwarn if alignof is used with a non- + type expression. However, __alignof__ is ok. */ + if (cxx_dialect >= cxx0x + && !strcmp (IDENTIFIER_POINTER (token->u.value), + "alignof")) + pedwarn (token->location, OPT_pedantic, + "ISO C++ does not allow %<alignof%> " + "with a non-type"); + + return cxx_sizeof_or_alignof_expr (operand, op, true); + } } case RID_NEW: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dd58aa5..06257d1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-12-22 Rodrigo Rivas Costa <rodrigorivascosta@gmail.com> + + * g++.dg/cpp0x/alignof2.C: New. + 2010-12-22 Martin Jambor <mjambor@suse.cz> PR tree-optimization/45934 diff --git a/gcc/testsuite/g++.dg/cpp0x/alignof2.C b/gcc/testsuite/g++.dg/cpp0x/alignof2.C new file mode 100644 index 0000000..7c5aad3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alignof2.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-std=c++0x -pedantic" } +int main(void) +{ + alignof(int); //ok with a type but not with an expression + alignof(3); // { dg-warning "alignof" } +} |