public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/65901] New: no warning or error for va_arg (ap, void)
@ 2015-04-27 12:48 vries at gcc dot gnu.org
  2015-04-27 16:04 ` [Bug c/65901] " mpolacek at gcc dot gnu.org
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: vries at gcc dot gnu.org @ 2015-04-27 12:48 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65901

            Bug ID: 65901
           Summary: no warning or error for va_arg (ap, void)
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

We have va_arg (ap, void) somewhere in the testsuite
(gcc.c-torture/compile/pr48767.c).

AFAIU, using void in va_arg is undefined behaviour in c.

Currently, we just compile it without warning or error:
...
$ cat ~/va-arg-void.c
#include <stdarg.h>

int
f (int d, ...)
{
  int res;
  va_list ap;
  va_start (ap, d);
  va_arg (ap, void);
  res = va_arg (ap, int);  
  va_end (ap);
  return res;
}

int
main (void)
{
  return f (1, 2, 3);
}
$ gcc -O2 ~/va-arg-void.c
$ ./a.out ; echo $?
3
...

Btw, note that va_arg (ap, void) has an effect on ap.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c/65901] no warning or error for va_arg (ap, void)
  2015-04-27 12:48 [Bug c/65901] New: no warning or error for va_arg (ap, void) vries at gcc dot gnu.org
@ 2015-04-27 16:04 ` mpolacek at gcc dot gnu.org
  2015-04-28  8:37 ` mpolacek at gcc dot gnu.org
  2015-04-28  8:37 ` mpolacek at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2015-04-27 16:04 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65901

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Untested patch:

--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -12648,6 +12648,11 @@ c_build_va_arg (location_t loc, tree expr, tree type)
   if (warn_cxx_compat && TREE_CODE (type) == ENUMERAL_TYPE)
     warning_at (loc, OPT_Wc___compat,
                "C++ requires promoted type, not enum type, in %<va_arg%>");
+  if (type == error_mark_node || !COMPLETE_TYPE_P (type))
+    {
+      c_incomplete_type_error (NULL_TREE, type);
+      return error_mark_node;
+    }
   return build_va_arg (loc, expr, type);
 }


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c/65901] no warning or error for va_arg (ap, void)
  2015-04-27 12:48 [Bug c/65901] New: no warning or error for va_arg (ap, void) vries at gcc dot gnu.org
  2015-04-27 16:04 ` [Bug c/65901] " mpolacek at gcc dot gnu.org
  2015-04-28  8:37 ` mpolacek at gcc dot gnu.org
@ 2015-04-28  8:37 ` mpolacek at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2015-04-28  8:37 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65901

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Fixed for GCC 6.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c/65901] no warning or error for va_arg (ap, void)
  2015-04-27 12:48 [Bug c/65901] New: no warning or error for va_arg (ap, void) vries at gcc dot gnu.org
  2015-04-27 16:04 ` [Bug c/65901] " mpolacek at gcc dot gnu.org
@ 2015-04-28  8:37 ` mpolacek at gcc dot gnu.org
  2015-04-28  8:37 ` mpolacek at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2015-04-28  8:37 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65901

--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Author: mpolacek
Date: Tue Apr 28 08:36:50 2015
New Revision: 222515

URL: https://gcc.gnu.org/viewcvs?rev=222515&root=gcc&view=rev
Log:
        PR c/65901
        * c-typeck.c (c_build_va_arg): Require TYPE be a complete type.

        * gcc.c-torture/compile/pr48767.c (foo): Add dg-error.
        * gcc.dg/pr65901.c: New test.

Added:
    trunk/gcc/testsuite/gcc.dg/pr65901.c
Modified:
    trunk/gcc/c/ChangeLog
    trunk/gcc/c/c-typeck.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.c-torture/compile/pr48767.c


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-04-28  8:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-27 12:48 [Bug c/65901] New: no warning or error for va_arg (ap, void) vries at gcc dot gnu.org
2015-04-27 16:04 ` [Bug c/65901] " mpolacek at gcc dot gnu.org
2015-04-28  8:37 ` mpolacek at gcc dot gnu.org
2015-04-28  8:37 ` mpolacek at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).