Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Jun 2026 16:23:54 +0000
From:      Olivier Cochard <olivier@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 2a9a7b3cc92e - main - devel/cbmc: update to 6.9.0
Message-ID:  <6a36be9a.1837f.38588c91@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by olivier:

URL: https://cgit.FreeBSD.org/ports/commit/?id=2a9a7b3cc92e0ea7ba5b51a50be0f0c29e410f48

commit 2a9a7b3cc92e0ea7ba5b51a50be0f0c29e410f48
Author:     Olivier Cochard <olivier@FreeBSD.org>
AuthorDate: 2026-06-20 16:19:10 +0000
Commit:     Olivier Cochard <olivier@FreeBSD.org>
CommitDate: 2026-06-20 16:22:44 +0000

    devel/cbmc: update to 6.9.0
    
    Reported by:    lwhsu
---
 devel/cbmc/Makefile                                |   2 +-
 devel/cbmc/distinfo                                |   6 +-
 devel/cbmc/files/patch-libc19                      | 171 -----------
 ...tch-src_solvers_flattening_boolbv__overflow.cpp |  28 --
 ...rs_smt2__incremental_convert__expr__to__smt.cpp |  37 ---
 devel/cbmc/files/patch-stdio-models-freebsd        | 315 ---------------------
 6 files changed, 4 insertions(+), 555 deletions(-)

diff --git a/devel/cbmc/Makefile b/devel/cbmc/Makefile
index 28f926218b10..0743231deea4 100644
--- a/devel/cbmc/Makefile
+++ b/devel/cbmc/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	cbmc
-PORTVERSION=	6.4.1
+PORTVERSION=	6.9.0
 DISTVERSIONPREFIX=	cbmc-
 CATEGORIES=	devel
 MASTER_SITES=	DEBIAN/pool/main/m/minisat2:minisat
diff --git a/devel/cbmc/distinfo b/devel/cbmc/distinfo
index 36f820a95e09..169a9728240a 100644
--- a/devel/cbmc/distinfo
+++ b/devel/cbmc/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1736265016
+TIMESTAMP = 1781965816
 SHA256 (minisat2_2.2.1.orig.tar.gz) = e54afa3c192c1753bc8075c0c7e126d5c495d9066e3f90a2588091149ac9ca40
 SIZE (minisat2_2.2.1.orig.tar.gz) = 44229
-SHA256 (diffblue-cbmc-cbmc-6.4.1_GH0.tar.gz) = 09507765190bd14d07452b68003087160c80325b251a6f13d50845bb5f44ae7e
-SIZE (diffblue-cbmc-cbmc-6.4.1_GH0.tar.gz) = 9127951
+SHA256 (diffblue-cbmc-cbmc-6.9.0_GH0.tar.gz) = 05bb5719273edba6e01842dfbc63349fc38f6774bd39074887e1fcec867c92ca
+SIZE (diffblue-cbmc-cbmc-6.9.0_GH0.tar.gz) = 9239653
diff --git a/devel/cbmc/files/patch-libc19 b/devel/cbmc/files/patch-libc19
deleted file mode 100644
index d90dd36c26e3..000000000000
--- a/devel/cbmc/files/patch-libc19
+++ /dev/null
@@ -1,171 +0,0 @@
-From 6ba37b383990f1542005fc252bcd3030c477d8ba Mon Sep 17 00:00:00 2001
-From: Sergei Zimmerman <145775305+xokdvium@users.noreply.github.com>
-Date: Mon, 6 Jan 2025 19:13:29 +0300
-Subject: [PATCH] util: Replace std::basic_string<unsigned> with
- std::basic_string<char32_t>
-
-Fixes build with libc++19 that fails with the error:
-
-> implicit instantiation of undefined template 'std::char_traits<unsigned int>'
-
-Motivation for the change: std::basic_string<T> requires that
-T implements std::char_traits and standard library provides specializations only
-for the following types: char, char16_t, char32_t, wchar_t as per [1].
-
-Note that this has been pointed out during a review previously [2], but made its
-way back into the code in other places.
-
-libc++19 has dropped implementations of std::char_traits for types not required
-by the standard [3].
-
-> The base template for std::char_traits has been removed in LLVM 19.
-> If you are using std::char_traits with types other than char, wchar_t, char8_t, char16_t, char32_t
-> or a custom character type for which you specialized std::char_traits, your code will stop working.
-
-[1] N4713, 24.2.1 Character traits [char.traits] (C++17)
-[2] https://www.github.com/diffblue/cbmc/pull/5277#discussion_r396609205
-[3] https://libcxx.llvm.org/ReleaseNotes/19.html#deprecations-and-removals
---- src/ansi-c/literals/convert_character_literal.cpp.orig	2024-11-28 20:55:26 UTC
-+++ src/ansi-c/literals/convert_character_literal.cpp
-@@ -32,7 +32,7 @@ exprt convert_character_literal(
-     PRECONDITION(src[1] == '\'');
-     PRECONDITION(src[src.size() - 1] == '\'');
- 
--    std::basic_string<unsigned int> value=
-+    std::basic_string<char32_t> value=
-       unescape_wide_string(std::string(src, 2, src.size()-3));
-     // the parser rejects empty character constants
-     CHECK_RETURN(!value.empty());
- src/ansi-c/literals/convert_character_literal.cpp |  2 +-
- src/ansi-c/literals/convert_string_literal.cpp    | 10 +++++-----
- src/ansi-c/literals/unescape_string.cpp           |  8 ++++----
- src/ansi-c/literals/unescape_string.h             |  2 +-
- src/ansi-c/scanner.l                              |  2 +-
- src/util/unicode.cpp                              |  2 +-
- src/util/unicode.h                                |  2 +-
- 7 files changed, 14 insertions(+), 14 deletions(-)
-
---- src/ansi-c/literals/convert_string_literal.cpp.orig	2024-11-28 20:55:26 UTC
-+++ src/ansi-c/literals/convert_string_literal.cpp
-@@ -18,7 +18,7 @@ Author: Daniel Kroening, kroening@kroening.com
- 
- #include "unescape_string.h"
- 
--std::basic_string<unsigned int> convert_one_string_literal(
-+std::basic_string<char32_t> convert_one_string_literal(
-   const std::string &src)
- {
-   PRECONDITION(src.size() >= 2);
-@@ -28,7 +28,7 @@ std::basic_string<unsigned int> convert_one_string_lit
-     PRECONDITION(src[src.size() - 1] == '"');
-     PRECONDITION(src[2] == '"');
- 
--    std::basic_string<unsigned int> value=
-+    std::basic_string<char32_t> value=
-       unescape_wide_string(std::string(src, 3, src.size()-4));
- 
-     // turn into utf-8
-@@ -57,7 +57,7 @@ std::basic_string<unsigned int> convert_one_string_lit
-       unescape_string(std::string(src, 1, src.size()-2));
- 
-     // pad into wide string
--    std::basic_string<unsigned int> value;
-+    std::basic_string<char32_t> value;
-     value.resize(char_value.size());
-     for(std::size_t i=0; i<char_value.size(); i++)
-       value[i]=char_value[i];
-@@ -72,7 +72,7 @@ exprt convert_string_literal(const std::string &src)
-   // e.g., something like "asd" "xyz".
-   // GCC allows "asd" L"xyz"!
- 
--  std::basic_string<unsigned int> value;
-+  std::basic_string<char32_t> value;
- 
-   char wide=0;
- 
-@@ -101,7 +101,7 @@ exprt convert_string_literal(const std::string &src)
-     INVARIANT(j < src.size(), "non-terminated string constant '" + src + "'");
- 
-     std::string tmp_src=std::string(src, i, j-i+1);
--    std::basic_string<unsigned int> tmp_value=
-+    std::basic_string<char32_t> tmp_value=
-       convert_one_string_literal(tmp_src);
-     value.append(tmp_value);
-     i=j;
---- src/ansi-c/literals/unescape_string.cpp.orig	2024-11-28 20:55:26 UTC
-+++ src/ansi-c/literals/unescape_string.cpp
-@@ -20,7 +20,7 @@ static void append_universal_char(
-   unsigned int value,
-   std::string &dest)
- {
--  std::basic_string<unsigned int> value_str(1, value);
-+  std::basic_string<char32_t> value_str(1, value);
- 
-   // turn into utf-8
-   const std::string utf8_value = utf32_native_endian_to_utf8(value_str);
-@@ -30,7 +30,7 @@ static void append_universal_char(
- 
- static void append_universal_char(
-   unsigned int value,
--  std::basic_string<unsigned int> &dest)
-+  std::basic_string<char32_t> &dest)
- {
-   dest.push_back(value);
- }
-@@ -153,10 +153,10 @@ std::string unescape_string(const std::string &src)
-   return unescape_string_templ<char>(src);
- }
- 
--std::basic_string<unsigned int> unescape_wide_string(
-+std::basic_string<char32_t> unescape_wide_string(
-   const std::string &src)
- {
--  return unescape_string_templ<unsigned int>(src);
-+  return unescape_string_templ<char32_t>(src);
- }
- 
- unsigned hex_to_unsigned(const char *hex, std::size_t digits)
---- src/ansi-c/literals/unescape_string.h.orig	2024-11-28 20:55:26 UTC
-+++ src/ansi-c/literals/unescape_string.h
-@@ -15,7 +15,7 @@ std::string unescape_string(const std::string &);
- #include <string>
- 
- std::string unescape_string(const std::string &);
--std::basic_string<unsigned int> unescape_wide_string(const std::string &);
-+std::basic_string<char32_t> unescape_wide_string(const std::string &);
- 
- unsigned hex_to_unsigned(const char *, std::size_t digits);
- unsigned octal_to_unsigned(const char *, std::size_t digits);
---- src/ansi-c/scanner.l.orig	2024-11-28 20:55:26 UTC
-+++ src/ansi-c/scanner.l
-@@ -89,7 +89,7 @@ int make_identifier()
-       for(; *p!=0 && digits>0; digits--, p++);
-       p--; // go back for p++ later
-       
--      std::basic_string<unsigned> utf32;
-+      std::basic_string<char32_t> utf32;
-       utf32+=letter;
-       
-       // turn into utf-8
---- src/util/unicode.cpp.orig	2024-11-28 20:55:26 UTC
-+++ src/util/unicode.cpp
-@@ -134,7 +134,7 @@ std::string
- /// \param s: UTF-32 encoded wide string
- /// \return utf8-encoded string with the same unicode characters as the input.
- std::string
--utf32_native_endian_to_utf8(const std::basic_string<unsigned int> &s)
-+utf32_native_endian_to_utf8(const std::basic_string<char32_t> &s)
- {
-   std::string result;
- 
---- src/util/unicode.h.orig	2024-11-28 20:55:26 UTC
-+++ src/util/unicode.h
-@@ -29,7 +29,7 @@ std::string
- #endif
- 
- std::string
--utf32_native_endian_to_utf8(const std::basic_string<unsigned int> &s);
-+utf32_native_endian_to_utf8(const std::basic_string<char32_t> &s);
- 
- /// \param utf8_str: UTF-8 string
- /// \return UTF-32 encoding of the string
diff --git a/devel/cbmc/files/patch-src_solvers_flattening_boolbv__overflow.cpp b/devel/cbmc/files/patch-src_solvers_flattening_boolbv__overflow.cpp
deleted file mode 100644
index 465a2fe8aac6..000000000000
--- a/devel/cbmc/files/patch-src_solvers_flattening_boolbv__overflow.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
---- src/solvers/flattening/boolbv_overflow.cpp.orig	2025-01-07 17:20:50 UTC
-+++ src/solvers/flattening/boolbv_overflow.cpp
-@@ -126,14 +126,14 @@ literalt boolbvt::convert_binary_overflow(const binary
-       : bv_utilst::representationt::UNSIGNED;
- 
-   if(
--    const auto plus_overflow = expr_try_dynamic_cast<plus_overflow_exprt>(expr))
-+    [[maybe_unused]] const auto plus_overflow = expr_try_dynamic_cast<plus_overflow_exprt>(expr))
-   {
-     if(bv0.size() != bv1.size())
-       return SUB::convert_rest(expr);
- 
-     return bv_utils.overflow_add(bv0, bv1, rep);
-   }
--  if(const auto minus = expr_try_dynamic_cast<minus_overflow_exprt>(expr))
-+  if([[maybe_unused]] const auto minus = expr_try_dynamic_cast<minus_overflow_exprt>(expr))
-   {
-     if(bv0.size() != bv1.size())
-       return SUB::convert_rest(expr);
-@@ -159,7 +159,7 @@ literalt boolbvt::convert_binary_overflow(const binary
-     return mult_overflow_result(prop, bv0, bv1, rep).back();
-   }
-   else if(
--    const auto shl_overflow = expr_try_dynamic_cast<shl_overflow_exprt>(expr))
-+    [[maybe_unused]] const auto shl_overflow = expr_try_dynamic_cast<shl_overflow_exprt>(expr))
-   {
-     DATA_INVARIANT(!bv0.empty(), "zero-sized operand");
- 
diff --git a/devel/cbmc/files/patch-src_solvers_smt2__incremental_convert__expr__to__smt.cpp b/devel/cbmc/files/patch-src_solvers_smt2__incremental_convert__expr__to__smt.cpp
deleted file mode 100644
index f146dee4a4fc..000000000000
--- a/devel/cbmc/files/patch-src_solvers_smt2__incremental_convert__expr__to__smt.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
---- src/solvers/smt2_incremental/convert_expr_to_smt.cpp.orig	2025-01-07 17:23:07 UTC
-+++ src/solvers/smt2_incremental/convert_expr_to_smt.cpp
-@@ -175,14 +175,14 @@ static smt_termt make_bitvector_resize_cast(
-   const bitvector_typet &from_type,
-   const bitvector_typet &to_type)
- {
--  if(const auto to_fixedbv_type = type_try_dynamic_cast<fixedbv_typet>(to_type))
-+  if([[maybe_unused]] const auto to_fixedbv_type = type_try_dynamic_cast<fixedbv_typet>(to_type))
-   {
-     UNIMPLEMENTED_FEATURE(
-       "Generation of SMT formula for type cast to fixed-point bitvector "
-       "type: " +
-       to_type.pretty());
-   }
--  if(const auto to_floatbv_type = type_try_dynamic_cast<floatbv_typet>(to_type))
-+  if([[maybe_unused]] const auto to_floatbv_type = type_try_dynamic_cast<floatbv_typet>(to_type))
-   {
-     UNIMPLEMENTED_FEATURE(
-       "Generation of SMT formula for type cast to floating-point bitvector "
-@@ -258,7 +258,7 @@ static smt_termt convert_expr_to_smt(
-   const auto &from_term = converted.at(cast.op());
-   const typet &from_type = cast.op().type();
-   const typet &to_type = cast.type();
--  if(const auto bool_type = type_try_dynamic_cast<bool_typet>(to_type))
-+  if([[maybe_unused]] const auto bool_type = type_try_dynamic_cast<bool_typet>(to_type))
-     return make_not_zero(from_term, cast.op().type());
-   if(const auto c_bool_type = type_try_dynamic_cast<c_bool_typet>(to_type))
-     return convert_c_bool_cast(from_term, from_type, *c_bool_type);
-@@ -894,7 +894,7 @@ static smt_termt convert_expr_to_smt(
-     "encoding.");
-   const size_t offset_bits = type->get_width() - object_bits;
-   if(
--    const auto symbol =
-+    [[maybe_unused]] const auto symbol =
-       expr_try_dynamic_cast<symbol_exprt>(address_of.object()))
-   {
-     const smt_bit_vector_constant_termt offset{0, offset_bits};
diff --git a/devel/cbmc/files/patch-stdio-models-freebsd b/devel/cbmc/files/patch-stdio-models-freebsd
deleted file mode 100644
index bf9b3d6fe6b8..000000000000
--- a/devel/cbmc/files/patch-stdio-models-freebsd
+++ /dev/null
@@ -1,315 +0,0 @@
-From 85ca3e5392902f15d3ce1a4a8004fc7f9a7657d8 Mon Sep 17 00:00:00 2001
-From: Michael Tautschnig <tautschn@amazon.com>
-Date: Fri, 29 Sep 2023 11:45:30 +0000
-Subject: [PATCH] C library: Refine and improve stdio models
-
-Fixes portability to FreeBSD, which redefines several functions as
-macros that would only conditionally call that function. Also, ensure
-that stdin/stdout/stderr point to valid objects when those are
-fdopen'ed.
---- .github/workflows/bsd.yaml.orig	2024-11-28 20:55:26 UTC
-+++ .github/workflows/bsd.yaml
-@@ -63,6 +63,7 @@ jobs:
-             # gmake TAGS='[!shouldfail]' -C jbmc/unit test
-             echo "Run regression tests"
-             gmake -C regression/cbmc test
-+            gmake -C regression/cbmc-library test
-             # gmake -C regression test-parallel JOBS=2
-             # gmake -C regression/cbmc test-paths-lifo
-             # env PATH=$PATH:`pwd`/src/solvers gmake -C regression/cbmc test-cprover-smt2
-@@ -125,6 +126,10 @@ jobs:
-             # gmake TAGS='[!shouldfail]' -C jbmc/unit test
-             echo "Run regression tests"
-             gmake -C regression/cbmc test
-+            # TODO: fileno and *fprintf tests are failing, requires debugging
-+            # https://github.com/openbsd/src/blob/master/include/stdio.h may be
-+            # useful (likely need to allocate __sF)
-+            gmake -C regression/cbmc-library test || true
-             # gmake -C regression test-parallel JOBS=2
-             # gmake -C regression/cbmc test-paths-lifo
-             # env PATH=$PATH:`pwd`/src/solvers gmake -C regression/cbmc test-cprover-smt2
-@@ -190,6 +195,7 @@ jobs:
-             echo "Run regression tests"
-             # TODO: we need to model some more library functions
-             gmake -C regression/cbmc test || true
-+            gmake -C regression/cbmc-library test || true
-             # gmake -C regression test-parallel JOBS=2
-             # gmake -C regression/cbmc test-paths-lifo
-             # env PATH=$PATH:`pwd`/src/solvers gmake -C regression/cbmc test-cprover-smt2
- .github/workflows/bsd.yaml                    |   6 +
- regression/cbmc-library/fileno-01/main.c      |   8 +-
- .../variant_multidimensional_ackermann/main.c |   3 +-
- src/ansi-c/library/stdio.c                    | 139 +++++++++++++++---
- 4 files changed, 132 insertions(+), 24 deletions(-)
-
---- regression/cbmc-library/fileno-01/main.c.orig	2024-11-28 20:55:26 UTC
-+++ regression/cbmc-library/fileno-01/main.c
-@@ -3,14 +3,10 @@ int main()
- 
- int main()
- {
--  // requires initialization of stdin/stdout/stderr
--  // assert(fileno(stdin) == 0);
--  // assert(fileno(stdout) == 1);
--  // assert(fileno(stderr) == 2);
--
-   int fd;
-   FILE *some_file = fdopen(fd, "");
--  assert(fileno(some_file) >= -1);
-+  if(some_file)
-+    assert(fileno(some_file) >= -1);
- 
-   return 0;
- }
---- regression/contracts-dfcc/variant_multidimensional_ackermann/main.c.orig	2024-11-28 20:55:26 UTC
-+++ regression/contracts-dfcc/variant_multidimensional_ackermann/main.c
-@@ -8,7 +8,8 @@ int main()
-   int n = 5;
-   int result = ackermann(m, n);
- 
--  printf("Result of the Ackermann function: %d\n", result);
-+  // we don't currently have contracts on what printf is assigning to
-+  // printf("Result of the Ackermann function: %d\n", result);
-   return 0;
- }
- 
---- src/ansi-c/library/stdio.c.orig	2024-11-28 20:55:26 UTC
-+++ src/ansi-c/library/stdio.c
-@@ -6,15 +6,7 @@
- #define __CPROVER_STDIO_H_INCLUDED
- #endif
- 
--/* undefine macros in OpenBSD's stdio.h that are problematic to the checker. */
--#if defined(__OpenBSD__)
--#undef getchar
- #undef putchar
--#undef getc
--#undef feof
--#undef ferror
--#undef fileno
--#endif
- 
- __CPROVER_bool __VERIFIER_nondet___CPROVER_bool(void);
- 
-@@ -237,7 +229,8 @@ __CPROVER_HIDE:;
-   __CPROVER_set_must(stream, "closed");
- #endif
-   int return_value=__VERIFIER_nondet_int();
--  free(stream);
-+  if(stream != stdin && stream != stdout && stream != stderr)
-+    free(stream);
-   return return_value;
- }
- 
-@@ -253,25 +246,83 @@ __CPROVER_HIDE:;
- #define __CPROVER_STDLIB_H_INCLUDED
- #endif
- 
-+#ifndef __CPROVER_ERRNO_H_INCLUDED
-+#  include <errno.h>
-+#  define __CPROVER_ERRNO_H_INCLUDED
-+#endif
-+
- FILE *fdopen(int handle, const char *mode)
- {
-   __CPROVER_HIDE:;
--  (void)handle;
-+    if(handle < 0)
-+    {
-+      errno = EBADF;
-+      return NULL;
-+    }
-   (void)*mode;
- #ifdef __CPROVER_STRING_ABSTRACTION
-   __CPROVER_assert(__CPROVER_is_zero_string(mode),
-     "fdopen zero-termination of 2nd argument");
- #endif
- 
--#if !defined(__linux__) || defined(__GLIBC__)
--  FILE *f=malloc(sizeof(FILE));
-+#if defined(_WIN32) || defined(__OpenBSD__) || defined(__NetBSD__)
-+  switch(handle)
-+  {
-+  case 0:
-+    return stdin;
-+  case 1:
-+    return stdout;
-+  case 2:
-+    return stderr;
-+  default:
-+  {
-+    FILE *f = malloc(sizeof(FILE));
-+    __CPROVER_assume(fileno(f) == handle);
-+    return f;
-+  }
-+  }
- #else
--  // libraries need to expose the definition of FILE; this is the
-+#  if !defined(__linux__) || defined(__GLIBC__)
-+  static FILE stdin_file;
-+  static FILE stdout_file;
-+  static FILE stderr_file;
-+#  else
-+  // libraries need not expose the definition of FILE; this is the
-   // case for musl
--  FILE *f=malloc(sizeof(int));
--#endif
-+  static int stdin_file;
-+  static int stdout_file;
-+  static int stderr_file;
-+#  endif
- 
-+  FILE *f = NULL;
-+  switch(handle)
-+  {
-+  case 0:
-+    stdin = &stdin_file;
-+    __CPROVER_havoc_object(&stdin_file);
-+    f = &stdin_file;
-+    break;
-+  case 1:
-+    stdout = &stdout_file;
-+    __CPROVER_havoc_object(&stdout_file);
-+    f = &stdout_file;
-+    break;
-+  case 2:
-+    stderr = &stderr_file;
-+    __CPROVER_havoc_object(&stderr_file);
-+    f = &stderr_file;
-+    break;
-+  default:
-+#  if !defined(__linux__) || defined(__GLIBC__)
-+    f = malloc(sizeof(FILE));
-+#  else
-+    f = malloc(sizeof(int));
-+#  endif
-+  }
-+
-+  __CPROVER_assume(fileno(f) == handle);
-   return f;
-+#endif
- }
- 
- /* FUNCTION: _fdopen */
-@@ -291,19 +342,60 @@ FILE *fdopen(int handle, const char *mode)
- #define __CPROVER_STDLIB_H_INCLUDED
- #endif
- 
-+#ifndef __CPROVER_ERRNO_H_INCLUDED
-+#  include <errno.h>
-+#  define __CPROVER_ERRNO_H_INCLUDED
-+#endif
-+
- #ifdef __APPLE__
-+
-+#  ifndef LIBRARY_CHECK
-+FILE *stdin;
-+FILE *stdout;
-+FILE *stderr;
-+#  endif
-+
- FILE *_fdopen(int handle, const char *mode)
- {
-   __CPROVER_HIDE:;
--  (void)handle;
-+    if(handle < 0)
-+    {
-+      errno = EBADF;
-+      return NULL;
-+    }
-   (void)*mode;
- #ifdef __CPROVER_STRING_ABSTRACTION
-   __CPROVER_assert(__CPROVER_is_zero_string(mode),
-     "fdopen zero-termination of 2nd argument");
- #endif
- 
--  FILE *f=malloc(sizeof(FILE));
-+  static FILE stdin_file;
-+  static FILE stdout_file;
-+  static FILE stderr_file;
- 
-+  FILE *f = NULL;
-+  switch(handle)
-+  {
-+  case 0:
-+    stdin = &stdin_file;
-+    __CPROVER_havoc_object(&stdin_file);
-+    f = &stdin_file;
-+    break;
-+  case 1:
-+    stdout = &stdout_file;
-+    __CPROVER_havoc_object(&stdout_file);
-+    f = &stdout_file;
-+    break;
-+  case 2:
-+    stderr = &stderr_file;
-+    __CPROVER_havoc_object(&stderr_file);
-+    f = &stderr_file;
-+    break;
-+  default:
-+    f = malloc(sizeof(FILE));
-+  }
-+
-+  __CPROVER_assume(fileno(f) == handle);
-   return f;
- }
- #endif
-@@ -506,6 +598,8 @@ __CPROVER_HIDE:;
- #define __CPROVER_STDIO_H_INCLUDED
- #endif
- 
-+#undef feof
-+
- int __VERIFIER_nondet_int(void);
- 
- int feof(FILE *stream)
-@@ -538,6 +632,8 @@ int feof(FILE *stream)
- #define __CPROVER_STDIO_H_INCLUDED
- #endif
- 
-+#undef ferror
-+
- int __VERIFIER_nondet_int(void);
- 
- int ferror(FILE *stream)
-@@ -570,6 +666,8 @@ int ferror(FILE *stream)
- #define __CPROVER_STDIO_H_INCLUDED
- #endif
- 
-+#undef fileno
-+
- int __VERIFIER_nondet_int(void);
- 
- int fileno(FILE *stream)
-@@ -735,6 +833,8 @@ int fgetc(FILE *stream)
- #define __CPROVER_STDIO_H_INCLUDED
- #endif
- 
-+#undef getc
-+
- int __VERIFIER_nondet_int(void);
- 
- int getc(FILE *stream)
-@@ -771,6 +871,8 @@ int getc(FILE *stream)
- #define __CPROVER_STDIO_H_INCLUDED
- #endif
- 
-+#undef getchar
-+
- int __VERIFIER_nondet_int(void);
- 
- int getchar(void)
-@@ -1939,10 +2041,13 @@ FILE *__acrt_iob_func(unsigned fd)
-   switch(fd)
-   {
-   case 0:
-+    __CPROVER_havoc_object(&stdin_file);
-     return &stdin_file;
-   case 1:
-+    __CPROVER_havoc_object(&stdout_file);
-     return &stdout_file;
-   case 2:
-+    __CPROVER_havoc_object(&stderr_file);
-     return &stderr_file;
-   default:
-     return (FILE *)0;


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a36be9a.1837f.38588c91>