[hackers] [scc] [cc1] Add warnings about promotable types in va_arg() || Roberto E. Vargas Caballero

From: <git_AT_suckless.org>
Date: Mon, 13 Feb 2017 09:17:40 +0100 (CET)

commit dd272d82cb84240d799c8af078cb995415bef0f0
Author: Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
AuthorDate: Mon Feb 13 09:13:10 2017 +0100
Commit: Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
CommitDate: Mon Feb 13 09:13:10 2017 +0100

    [cc1] Add warnings about promotable types in va_arg()
    
    Bool, char and short are promoted to int when they are passed through ...,
    and it means that it is impossible to have them in a stack created by a
    variadic function. This patch warns to the user about it and correct
    the type to int.

diff --git a/cc1/builtin.c b/cc1/builtin.c
index d2b3068..49eab2a 100644
--- a/cc1/builtin.c
+++ b/cc1/builtin.c
_AT_@ -20,6 +20,12 @@ builtin_va_arg(Symbol *sym)
                 errorp("incorrect parameters for va_arg");
                 return constnode(zero);
         }
+ if (tp == booltype ||
+ tp == chartype || tp == uchartype || tp == schartype ||
+ tp == shortype || tp == ushortype) {
+ warn("bool, char and short are promoted to int when passed through '...'");
+ tp = (tp->flags & TSIGNED) ? inttype : uinttype;
+ }
 
         np = node(OBUILTIN, tp, ap, NULL);
         np->sym = sym;
Received on Mon Feb 13 2017 - 09:17:40 CET

This archive was generated by hypermail 2.3.0 : Mon Feb 13 2017 - 09:24:18 CET