16722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks// RUN: %clang_cc1 -fsyntax-only -verify %s
26722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks// RUN: cp %s %t
36722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks// RUN: not %clang_cc1 -fsyntax-only -fixit -x c %t
46722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks// RUN: %clang_cc1 -fsyntax-only -pedantic -x c %t
56722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks
66722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksvoid ip(int *aPtr) {}   // expected-note{{passing argument to parameter 'aPtr' here}}
76722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksvoid i(int a) {}        // expected-note{{passing argument to parameter 'a' here}}
86722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksvoid ii(int a) {}       // expected-note{{passing argument to parameter 'a' here}}
96722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksvoid fp(float *aPtr) {} // expected-note{{passing argument to parameter 'aPtr' here}}
106722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksvoid f(float a) {}      // expected-note{{passing argument to parameter 'a' here}}
116722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks
126722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksvoid f2(int *aPtr, int a, float *bPtr, char c) {
136722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  float fl = 0;
146722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  ip(a);     // expected-warning{{incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'; take the address with &}}
156722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  i(aPtr);   // expected-warning{{incompatible pointer to integer conversion passing 'int *' to parameter of type 'int'; dereference with *}}
166722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  ii(&a);     // expected-warning{{incompatible pointer to integer conversion passing 'int *' to parameter of type 'int'; remove &}}
176722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  fp(*bPtr); // expected-error{{passing 'float' to parameter of incompatible type 'float *'; remove *}}
186722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  f(bPtr);   // expected-error{{passing 'float *' to parameter of incompatible type 'float'; dereference with *}}
196722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  a = aPtr;  // expected-warning{{incompatible pointer to integer conversion assigning to 'int' from 'int *'; dereference with *}}
206722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  fl = bPtr + a;  // expected-error{{assigning to 'float' from incompatible type 'float *'; dereference with *}}
216722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  bPtr = bPtr[a]; // expected-error{{assigning to 'float *' from incompatible type 'float'; take the address with &}}
226722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks}
23