diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 19e787e5418f..0ffb1bfd32c5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-01-30 Giovanni Bajo + + PR c++/13683 + * call.c (convert_arg_to_ellipsis): Don't emit a warning if within + a sizeof expression.block + 2004-01-29 Mark Mitchell PR c++/13883 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index ea494c7b8c5a..d391b29f88b1 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4127,14 +4127,18 @@ convert_arg_to_ellipsis (tree arg) arg = require_complete_type (arg); - if (arg != error_mark_node && ! pod_type_p (TREE_TYPE (arg))) + if (arg != error_mark_node + && !pod_type_p (TREE_TYPE (arg))) { /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn here and do a bitwise copy, but now cp_expr_size will abort if we - try to do that. */ - warning ("cannot pass objects of non-POD type `%#T' through `...'; \ -call will abort at runtime", - TREE_TYPE (arg)); + try to do that. + If the call appears in the context of a sizeof expression, + there is no need to emit a warning, since the expression won't be + evaluated. We keep the builtin_trap just as a safety check. */ + if (!skip_evaluation) + warning ("cannot pass objects of non-POD type `%#T' through `...'; " + "call will abort at runtime", TREE_TYPE (arg)); arg = call_builtin_trap (TREE_TYPE (arg)); }