Defect Report #094
Submission Date: 03 Dec 93
Submittor: WG14
Source: Ron Guilmette
Question
ANSI/ISO C Defect report #rfg1:
There appears to be an inconsistency between the constraints on ``passing'' 
values versus ``returning'' values. The constraints for function 
calls clearly indicate that a diagnostic is required if any given 
actual argument is passed (to a prototyped function) into a corresponding 
formal parameter whose type is not assignment compatible with respect 
to the type of the passed value. In the case of values returned by 
a return statement however, there seems to be no such compatibility 
constraint imposed upon the expression given
in the return statement 
and the corresponding (declared) function return type.
A new constraint should be added to the C Standard like:
If present, the expression given in a return statement 
shall have a type such that its value may be assigned to an object 
with the unqualified version of the return type of the containing 
function.
(This exactly mirrors the existing constraint on parameter matching 
imposed upon calls to prototyped functions.)
Response
The constraint in the description of the return statement is 
unneeded. Early on, the Committee decided that if a behavior was described 
as being equivalent to another construct, all of the constraints of 
that construct would apply. This ``chaining'' process means 
that any violation of a constraint in any section referred to explicitly 
or by the phrases ``equivalent behavior'' or ``as if'' 
will generate a diagnostic.
The Semantics section of the return statement (subclause 6.6.6.4) 
states: ``If the expression has a type different from that of the 
function in which it appears, it is converted as if it were assigned 
to an object of that type.'' The constraints in the section on 
simple assignment (subclause 6.3.16.1) are sufficient to assure assignment 
compatibility of the two types.
Previous Defect Report
< - > 
Next Defect Report