================
@@ -2211,6 +2221,15 @@ void StdLibraryFunctionsChecker::initFunctionSummaries(
                   ErrnoNEZeroIrrelevant, GenericFailureMsg)
             .ArgConstraint(NotNull(ArgNo(0))));
 
+    // int pclose(FILE *stream);
+    addToFunctionSummaryMap(
+        "pclose", Signature(ArgTypes{FilePtrTy}, RetType{IntTy}),
+        Summary(NoEvalCall)
+            .Case({ReturnValueCondition(WithinRange, {{0, IntMax}})},
+                  ErrnoMustNotBeChecked, GenericSuccessMsg)
+            .Case(ReturnsMinusOne, ErrnoNEZeroIrrelevant, GenericFailureMsg)
+            .ArgConstraint(NotNull(ArgNo(0))));
+
----------------
steakhal wrote:

Quoting manpage: `on success, returns the exit status of the command`, 
consequently, this might be negative on success.

I believe the manpage for `exit(3)` should tell us what values can we expect as 
exit codes.
> The exit() function causes normal process termination and the
       least significant byte of status (i.e., status & 0xFF) is
       returned to the parent (see 
[wait(2)](https://man7.org/linux/man-pages/man2/wait.2.html)).

So, I believe any value could be an exit code, that is representable by a 
signed char (if CHAR_BITS == 8, then [-128,127])

Also add tests for the range for the result of the `pclose`.

https://github.com/llvm/llvm-project/pull/78895
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to