cc: add two new #pragma varargck
cc: add two new #pragma varargck

#pragma varargck countpos f 1
says that the first argument to f is
the count of variadic arguments that follow.

#pragma varargck type f t
says that t is one of the allowed types for
a variadic argument to f.
(can be repeated)

combined, these can be used to check the
runtime.stdcall functions in the windows port
or in any other port that needs a vararg list of
uintptrs even on a 64-bit platform (where it is
very easy to pass a less-than-uintptr in the ...).

demo:

typedef unsigned int uintptr;

#pragma varargck countpos f 1
#pragma varargck type f uintptr
#pragma varargck type f void*

int f(int count, ...);

void *v;
char *p;

void
main(void)
{
        f(1, v);  // ok
        f(1, main);  // ok
        f(1, p);  // ok
        f(2, v, v);  // ok

        f(2, v);  // found 1 argument after count 2
        f(1, 'a');  // invalid type INT in call to f
        f(1, 0);  // invalid type INT in call to f
}

R=ken, r, alex.brainman
CC=golang-dev
http://codereview.appspot.com/4634103

gnanderson/go,tv42/old-go,pombredanne/go-deleteme,dsriram/golang,gnanderson/go,gnanderson/go,apparentlymart/golang,apparentlymart/golang,dsriram/golang,tv42/old-go,tv42/old-go,dsriram/golang,ssrl/go,ssrl/go,gnanderson/go,ssrl/go,pombredanne/go-deleteme,tv42/old-go,apparentlymart/golang,tv42/old-go,ssrl/go,dsriram/golang,dsriram/golang,pombredanne/go-deleteme,tv42/old-go,gnanderson/go,gnanderson/go,apparentlymart/golang,ssrl/go,gnanderson/go,pombredanne/go-deleteme,pombredanne/go-deleteme,apparentlymart/golang,ssrl/go,tv42/old-go,pombredanne/go-deleteme,ssrl/go,dsriram/golang,apparentlymart/golang,pombredanne/go-deleteme,dsriram/golang,apparentlymart/golang