// RUN: %clang_cc1 -fsyntax-only -verify %s // RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s // RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits -x c++ %s 2>&1 | FileCheck %s // expected-note@+1 5{{previous definition is here}} int main() { return 0; } // expected-error@+3 {{conflicting types for 'main}} // expected-warning@+2 {{return type of 'main' is not 'int'}} // expected-note@+1 {{change return type to 'int'}} void main() { // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:1-[[@LINE-1]]:5}:"int" } // expected-error@+3 {{conflicting types for 'main}} // expected-warning@+2 {{return type of 'main' is not 'int'}} // expected-note@+1 {{change return type to 'int'}} double main() { // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:1-[[@LINE-1]]:7}:"int" return 0.0; } // TODO: Store qualifier source locations for return types so // we can replace the full type with this fix-it. // // expected-error@+3 {{conflicting types for 'main}} // expected-warning@+2 {{return type of 'main' is not 'int'}} // expected-note@+1 {{change return type to 'int'}} const float main() { // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:7-[[@LINE-1]]:12}:"int" return 0.0f; } typedef void *(*fptr)(int a); // expected-error@+3 {{conflicting types for 'main}} // expected-warning@+2 {{return type of 'main' is not 'int'}} // expected-note@+1 {{change return type to 'int'}} fptr main() { // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:1-[[@LINE-1]]:5}:"int" return (fptr) 0; } // expected-error@+2 {{conflicting types for 'main}} // expected-warning@+1 {{return type of 'main' is not 'int'}} void *(*main())(int a) { return (fptr) 0; }