Opened 4 years ago
#258 new defect
Unclear intended type for char literal
| Reported by: | mlbrooks | Owned by: | |
|---|---|---|---|
| Priority: | minor | Component: | cfa-cc |
| Version: | 1.0 | Keywords: | |
| Cc: |
Description
Bug or feature? Here is a case of C disagreeing with CFA. Are we okay with it? If so, we need to fix CFA's behaviour to be self-consistent. If not, we need to reconcile this point of C compatibility with our rules for overload selection.
C's preferred type for 'x' is int. Today's CFA mostly prefers type char.
This disagreement is a point of backward incompatibility. Yet, CFA's overloading provides precedent for "CFA is right."
The incompatibility:
#include <stdio.h>
int main( int argc, char ** argv ) {
printf("sizeof('x') is %ld\n", sizeof('x'));
typeof('x') var = 'x';
printf("sizeof(var) is %ld\n", sizeof(var));
printf("sizeof(typeof('x')) is %ld\n", sizeof(typeof('x')));
}
CFA, actual:
sizeof('x') is 4
sizeof(var) is 1
sizeof(typeof('x')) is 1
GCC, actual:
sizeof('x') is 4
sizeof(var) is 4
sizeof(typeof('x')) is 4
Proposed self-consistent, for CFA:
sizeof('x') is 1
sizeof(var) is 1
sizeof(typeof('x')) is 1
Precedent for, "'x' should be a char." (Code is CFA only)
void f( int ) {
printf("int overload called\n");
}
void f( char ) {
printf("char overload called\n");
}
int main( int argc, char ** argv ) {
typeof('q') var;
printf("%ld\n", sizeof(var));
f( 'q' );
f( var );
}
CFA, actual and expected:
1 char overload called char overload called