From 5840af0f8593a9d510df2d07b8b50b34a468769a Mon Sep 17 00:00:00 2001 From: Giovanni Bajo Date: Fri, 30 Jan 2004 15:08:37 +0000 Subject: [PATCH] re PR c++/13683 (bogus warning about passing non-PODs through ellipsis) PR c++/13683 * call.c (convert_arg_to_ellipsis): Don't emit a warning if within a sizeof expression.block From-SVN: r76963 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/call.c | 14 +++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 19e787e5418..0ffb1bfd32c 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 ea494c7b8c5..d391b29f88b 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)); } -- 2.30.2