diff options
author | Ben Shi <2283975856@qq.com> | 2024-01-16 21:15:41 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-16 21:15:41 +0800 |
commit | da6806dcb45d311efceaba0d770d9027d68a0de9 (patch) | |
tree | dea3d8ee3eaa1ffd80817b0593c766ab94d95979 /clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp | |
parent | 12c7d4c4b4ddbb9ee407bcfbfb79e47ae1de832a (diff) | |
download | llvm-da6806dcb45d311efceaba0d770d9027d68a0de9.zip llvm-da6806dcb45d311efceaba0d770d9027d68a0de9.tar.gz llvm-da6806dcb45d311efceaba0d770d9027d68a0de9.tar.bz2 |
Improve modeling of two functions in StdLibraryFunctionsChecker (#78079)
Improve 'errno' modeling of 'opendir' and 'fdopendir'.
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp index 641ebe9..83f972c 100644 --- a/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp @@ -2792,18 +2792,21 @@ void StdLibraryFunctionsChecker::initFunctionSummaries( .ArgConstraint(NotNull(ArgNo(2)))); // DIR *opendir(const char *name); - // FIXME: Improve for errno modeling. addToFunctionSummaryMap( "opendir", Signature(ArgTypes{ConstCharPtrTy}, RetType{DirPtrTy}), - Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0)))); + Summary(NoEvalCall) + .Case({NotNull(Ret)}, ErrnoMustNotBeChecked, GenericSuccessMsg) + .Case({IsNull(Ret)}, ErrnoNEZeroIrrelevant, GenericFailureMsg) + .ArgConstraint(NotNull(ArgNo(0)))); // DIR *fdopendir(int fd); - // FIXME: Improve for errno modeling. - addToFunctionSummaryMap("fdopendir", - Signature(ArgTypes{IntTy}, RetType{DirPtrTy}), - Summary(NoEvalCall) - .ArgConstraint(ArgumentCondition( - 0, WithinRange, Range(0, IntMax)))); + addToFunctionSummaryMap( + "fdopendir", Signature(ArgTypes{IntTy}, RetType{DirPtrTy}), + Summary(NoEvalCall) + .Case({NotNull(Ret)}, ErrnoMustNotBeChecked, GenericSuccessMsg) + .Case({IsNull(Ret)}, ErrnoNEZeroIrrelevant, GenericFailureMsg) + .ArgConstraint( + ArgumentCondition(0, WithinRange, Range(0, IntMax)))); // int isatty(int fildes); addToFunctionSummaryMap( |