Defect Report #113
Submission Date: 03 Dec 93
Submittor: WG14
Source: Ron Guilmette
Question
ANSI/ISO C Defect report #rfg20:
Subject: Return expressions in functions declared to return qualified
void.
a) Does the following code involve usage which requires
a diagnostic from a conforming implementation?
b) Does the following code involve usage which renders the
code itself not strictly conforming?
volatile void func0 (volatile void *vvp)
{
return *vvp; /* ? */
}
const void func1 (const void *cvp)
{
return *cvp; /* ? */
}
Background:
Subclause 6.6.6.4 (Constraints):
A return statement with an expression
shall not appear in a function whose
return type is void.
Note that this constraint doesn't say anything about functions declared
to return some qualified version of the void type.
I believe that it was probably the Committee's true intent to require
a diagnostic for any attempt to specify an expression in a return
statement within any function declared to return any qualified
or unqualified version of the void type (and indeed, many existing
implementations do already issue diagnostics for usage such as that
shown in the example above). Thus, it would seem appropriate for the
Committee to amend the above quoted constraint
(from subclause 6.6.6.4) to read:
A return statement with an expression shall not appear
in a function whose return type is a void type.
Response
a) Yes, a diagnostic is required.
b) Yes, this renders the program not strictly conforming
code.
A qualified void function return type
is disallowed by the constraints of subclause 6.7.1:
The return type from a function shall be void
or an object type other than array.
The constraint does not say ``a void type'' and thus void
must not be qualified when used as a function return type. Since a
qualified void return type
is already invalid, there is no need for
the additional constraint on the
return statement (subclause 6.6.6.4).
Previous Defect Report
< - >
Next Defect Report