checkScanfFormat

Check that arguments to a scanf format string are compatible with that string. Issue errors for incompatibilities.

Follows the C99 specification for scanf.

Takes a generous, rather than strict, view of compatiblity. For example, an unsigned value can be formatted with a signed specifier.

Diagnosed incompatibilities are:

1. incompatible sizes which will cause argument misalignment 2. deferencing arguments that are not pointers 3. insufficient number of arguments 4. struct arguments 5. array and slice arguments 6. non-standard formats 7. undefined behavior per C99

Per the C Standard, extra arguments are ignored.

No attempt is made to fix the arguments or the format string.

bool
checkScanfFormat
(
ref const Loc loc
,
scope const char[] format
,,,)

Parameters

loc Loc

location for error messages

format char[]

format string

args Expression[]

arguments to match with format string

isVa_list bool

if a "v" function (format check only)

eSink ErrorSink

where the error messages go

Return Value

Type: bool

true if errors occurred References: C99 7.19.6.2 https://www.cplusplus.com/reference/cstdio/scanf/

Meta