diff options
author | John McCall <rjmccall@apple.com> | 2009-07-28 01:00:58 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2009-07-28 01:00:58 +0000 |
commit | caa194530639461447b1e1ec7443d4e99448ca57 (patch) | |
tree | e336a4878c6a1a184c04f0791b82d193ee628ff8 /clang/lib/Sema/SemaDecl.cpp | |
parent | 5cf338ad60c626886e92ae8fb3c0209d124a4153 (diff) | |
download | bcm5719-llvm-caa194530639461447b1e1ec7443d4e99448ca57.tar.gz bcm5719-llvm-caa194530639461447b1e1ec7443d4e99448ca57.zip |
Allow functions to be marked "implicit return zero" and so mark main().
Codegen by initializing the return value with its LLVM type's null value.
llvm-svn: 77288
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 7ab7356aa0c..9b6de12bb24 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -3501,8 +3501,11 @@ Sema::DeclPtrTy Sema::ActOnFinishFunctionBody(DeclPtrTy D, StmtArg BodyArg, Stmt *Body = BodyArg.takeAs<Stmt>(); if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(dcl)) { FD->setBody(Body); - if (!FD->isMain()) + if (FD->isMain()) // C and C++ allow for main to automagically return 0. + // Implements C++ [basic.start.main]p5 and C99 5.1.2.2.3. + FD->setHasImplicitReturnZero(true); + else CheckFallThroughForFunctionDef(FD, Body); if (!FD->isInvalidDecl()) |