Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(2119)

Issue 4634103: code review 4634103: cc: add two new #pragma varargck (Closed)

Can't Edit
Can't Publish+Mail
Start Review
Created:
13 years, 9 months ago by rsc
Modified:
13 years, 9 months ago
Reviewers:
CC:
ken2, r, brainman, golang-dev
Visibility:
Public.

Description

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 }

Patch Set 1 #

Patch Set 2 : diff -r eaa696629d4d https://go.googlecode.com/hg #

Patch Set 3 : diff -r eaa696629d4d https://go.googlecode.com/hg #

Total comments: 3

Patch Set 4 : diff -r 7132c4b0ec21 https://go.googlecode.com/hg/ #

Unified diffs Side-by-side diffs Delta from patch set Stats (+112 lines, -15 lines) Patch
M src/cmd/cc/dpchk.c View 1 2 3 10 chunks +112 lines, -15 lines 0 comments Download

Messages

Total messages: 5
rsc
Hello ken2, r (cc: golang-dev@googlegroups.com), I'd like you to review this change to https://go.googlecode.com/hg
13 years, 9 months ago (2011-06-27 23:49:53 UTC) #1
r
LGTM
13 years, 9 months ago (2011-06-27 23:53:13 UTC) #2
brainman
LGTM because my change http://codereview.appspot.com/4627071/ works. I'm not familiar enough with the code. Thank you ...
13 years, 9 months ago (2011-06-28 02:35:42 UTC) #3
rsc
http://codereview.appspot.com/4634103/diff/3/src/cmd/cc/cc.h File src/cmd/cc/cc.h (right): http://codereview.appspot.com/4634103/diff/3/src/cmd/cc/cc.h#newcode825 src/cmd/cc/cc.h:825: On 2011/06/28 02:35:42, brainman wrote: > I don't think ...
13 years, 9 months ago (2011-06-28 02:37:31 UTC) #4
rsc
13 years, 9 months ago (2011-06-28 02:42:38 UTC) #5
*** Submitted as http://code.google.com/p/go/source/detail?r=18e35543f1af ***

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
Sign in to reply to this message.

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b