re PR c/67854 (Missing diagnostic for passing bool to va_arg)
PR c/67854 * gimplify.c (gimplify_va_arg_expr): Use expanded location for the "is promoted to" warning. * gcc.dg/pr67854.c: New test. From-SVN: r233891
This commit is contained in:
parent
1e840f3974
commit
bd02f00fcf
@ -1,3 +1,9 @@
|
||||
2016-03-02 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/67854
|
||||
* gimplify.c (gimplify_va_arg_expr): Use expanded location for the
|
||||
"is promoted to" warning.
|
||||
|
||||
2016-03-01 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* config.gcc: Deprecate mep-*.
|
||||
|
@ -11573,24 +11573,28 @@ gimplify_va_arg_expr (tree *expr_p, gimple_seq *pre_p,
|
||||
{
|
||||
static bool gave_help;
|
||||
bool warned;
|
||||
/* Use the expansion point to handle cases such as passing bool (defined
|
||||
in a system header) through `...'. */
|
||||
source_location xloc
|
||||
= expansion_point_location_if_in_system_header (loc);
|
||||
|
||||
/* Unfortunately, this is merely undefined, rather than a constraint
|
||||
violation, so we cannot make this an error. If this call is never
|
||||
executed, the program is still strictly conforming. */
|
||||
warned = warning_at (loc, 0,
|
||||
"%qT is promoted to %qT when passed through %<...%>",
|
||||
warned = warning_at (xloc, 0,
|
||||
"%qT is promoted to %qT when passed through %<...%>",
|
||||
type, promoted_type);
|
||||
if (!gave_help && warned)
|
||||
{
|
||||
gave_help = true;
|
||||
inform (loc, "(so you should pass %qT not %qT to %<va_arg%>)",
|
||||
inform (xloc, "(so you should pass %qT not %qT to %<va_arg%>)",
|
||||
promoted_type, type);
|
||||
}
|
||||
|
||||
/* We can, however, treat "undefined" any way we please.
|
||||
Call abort to encourage the user to fix the program. */
|
||||
if (warned)
|
||||
inform (loc, "if this code is reached, the program will abort");
|
||||
inform (xloc, "if this code is reached, the program will abort");
|
||||
/* Before the abort, allow the evaluation of the va_list
|
||||
expression to exit or longjmp. */
|
||||
gimplify_and_add (valist, pre_p);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-03-02 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/67854
|
||||
* gcc.dg/pr67854.c: New test.
|
||||
|
||||
2016-03-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/70025
|
||||
|
11
gcc/testsuite/gcc.dg/pr67854.c
Normal file
11
gcc/testsuite/gcc.dg/pr67854.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* PR c/67854 */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
void
|
||||
foo (va_list ap)
|
||||
{
|
||||
va_arg (ap, bool); /* { dg-warning "is promoted to .int. when passed through" } */
|
||||
}
|
Loading…
Reference in New Issue
Block a user