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 | 0cfeb63f532973777f6fe75d3468c3acad4adfe3 (patch) | |
tree | 246a78d6e341750300ff051bed028a52cd6c1ea0 /lib/Sema/SemaDecl.cpp | |
parent | 41ef0c3472a3d09c29bc1792f3d26842f2b8a695 (diff) |
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.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77288 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 7ab7356aa0..9b6de12bb2 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/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()) |