diff options
| author | Gabor Greif <ggreif@gmail.com> | 2010-09-08 00:31:13 +0000 |
|---|---|---|
| committer | Gabor Greif <ggreif@gmail.com> | 2010-09-08 00:31:13 +0000 |
| commit | 80c218386fe602893aecf7fd3b9df789ef0bba56 (patch) | |
| tree | 9d9eeaec36ec542f146d91b3671759b3a0b786bb | |
| parent | 136d035e45bee162623ba29957742700b66a3c52 (diff) | |
| download | bcm5719-llvm-80c218386fe602893aecf7fd3b9df789ef0bba56.tar.gz bcm5719-llvm-80c218386fe602893aecf7fd3b9df789ef0bba56.zip | |
add a fixit when 'main' does ot return 'int'; review welcome
llvm-svn: 113324
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 12 | ||||
| -rw-r--r-- | clang/test/FixIt/fixit.cpp | 6 |
2 files changed, 15 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index df077fd7097..2b42fb60fbb 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -3171,7 +3171,7 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC, SC = SC_Static; break; } - case DeclSpec::SCS_private_extern: SC = SC_PrivateExtern;break; + case DeclSpec::SCS_private_extern: SC = SC_PrivateExtern; break; } if (D.getDeclSpec().isThreadSpecified()) @@ -3976,8 +3976,14 @@ void Sema::CheckMain(FunctionDecl* FD) { const FunctionType* FT = T->getAs<FunctionType>(); if (!Context.hasSameUnqualifiedType(FT->getResultType(), Context.IntTy)) { - // TODO: add a replacement fixit to turn the return type into 'int'. - Diag(FD->getTypeSpecStartLoc(), diag::err_main_returns_nonint); + TypeSourceInfo *TSI = FD->getTypeSourceInfo(); + TypeLoc TL = TSI->getTypeLoc(); + const SemaDiagnosticBuilder& D = Diag(FD->getTypeSpecStartLoc(), + diag::err_main_returns_nonint); + if (FunctionTypeLoc* PTL = dyn_cast<FunctionTypeLoc>(&TL)) { + D << FixItHint::CreateReplacement(PTL->getResultLoc().getSourceRange(), + "int"); + } FD->setInvalidDecl(true); } diff --git a/clang/test/FixIt/fixit.cpp b/clang/test/FixIt/fixit.cpp index 5a281323970..9b39c9e8a57 100644 --- a/clang/test/FixIt/fixit.cpp +++ b/clang/test/FixIt/fixit.cpp @@ -60,3 +60,9 @@ namespace rdar7796492 { } } + +CT<1> main(void); // expected-error{{'main' must return 'int'}} + +// typedef CT<1> mainT(void); +// mainT main; // TODO + |

