On Wed, Nov 28, 2012 at 3:35 PM, Rafael Espíndola
<[email protected]> wrote:
>> I think I wasn't very clear here. My interpretation is: The type of the 'x'
>> variable within the definition of 'f' is int(*)[]. That 'x' is not a
>> redeclaration of the parameter in the previous 'f' declaration, so its type
>> doesn't get merged, even though the type of the function does get merged.
>>
>
> OK, I have added the testcases from this thread and updated the
> comment to not suggest patching the ParmVarDecl. Can you think of a
> sema test that would capture us merging the function type and not just
> the return type?

void f(int (*)[10]);
void f(int (*)[]);
void g() {
  int x[5];
  f(&x);
}

gcc gives "warning: passing argument 1 of ‘f’ from incompatible
pointer type"; clang should print a similar warning.

> What is the behavior you would expect from CodeGen? Given
>
> void f(int);
> void f(a)
>   char a;
> {
>   int v[sizeof(a) == 1 ? 1 : -1];
> }
>
> Should it produce a f(i32) that truncates its argument?

Yes, this should continue to work the same way it works on trunk.

-Eli

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to