diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-11-21 00:27:44 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-11-21 00:27:44 +0000 |
commit | 5917d7894e8274b9625275dd4dd86c5d0040a242 (patch) | |
tree | 09c3178478323c166af19f8a16b96037f5dc42d4 /lib/Analysis/GRExprEngineInternalChecks.cpp | |
parent | 9f49055456049bdff41f61231553d29573fac184 (diff) |
- Clean up transfer function logic for 'return' statements.
- Add check for returning an undefined value to a caller.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59764 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/GRExprEngineInternalChecks.cpp')
-rw-r--r-- | lib/Analysis/GRExprEngineInternalChecks.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/Analysis/GRExprEngineInternalChecks.cpp b/lib/Analysis/GRExprEngineInternalChecks.cpp index cc5762267b..b4d4cb2c56 100644 --- a/lib/Analysis/GRExprEngineInternalChecks.cpp +++ b/lib/Analysis/GRExprEngineInternalChecks.cpp @@ -180,7 +180,7 @@ public: } } }; - + class VISIBILITY_HIDDEN RetStack : public BuiltinBug { public: RetStack() : BuiltinBug("return of stack address") {} @@ -239,7 +239,16 @@ public: } } }; - + +class VISIBILITY_HIDDEN RetUndef : public BuiltinBug { +public: + RetUndef() : BuiltinBug("uninitialized return value", + "Uninitialized or undefined return value returned to caller.") {} + + virtual void EmitBuiltinWarnings(BugReporter& BR, GRExprEngine& Eng) { + Emit(BR, Eng.ret_undef_begin(), Eng.ret_undef_end()); + } +}; class VISIBILITY_HIDDEN UndefBranch : public BuiltinBug { struct VISIBILITY_HIDDEN FindUndefExpr { @@ -379,6 +388,7 @@ void GRExprEngine::RegisterInternalChecks() { Register(new UndefResult()); Register(new BadCall()); Register(new RetStack()); + Register(new RetUndef()); Register(new BadArg()); Register(new BadMsgExprArg()); Register(new BadReceiver()); |