From: Arthur Cohen <arthur.co...@embecosm.com>

gcc/rust/ChangeLog:

        * checks/errors/borrowck/ffi-polonius/Cargo.lock: Regenerate.
        * checks/errors/borrowck/ffi-polonius/Cargo.toml: Update to use source 
patching instead of
        vendoring, lower edition to 2018.
        * checks/errors/borrowck/ffi-polonius/vendor/log/Cargo.toml: Change 
edition to 2018.
        * checks/errors/borrowck/ffi-polonius/vendor/log/src/lib.rs: Remove 
uses of unstable
        feature.
        * checks/errors/borrowck/ffi-polonius/.cargo/config.toml: Removed.

libgrust/ChangeLog:

        * libformat_parser/Makefile.am: Avoid using --config as it is 
unsupported by cargo 1.49.
        * libformat_parser/Makefile.in: Regenerate.
        * libformat_parser/generic_format_parser/src/lib.rs: Use extension 
trait for missing
        features.
        * libformat_parser/src/lib.rs: Likewise.
        * libformat_parser/.cargo/config: Moved to...
        * libformat_parser/.cargo/config.toml: ...here.
---
 .../errors/borrowck/ffi-polonius/Cargo.lock   |  10 --
 .../errors/borrowck/ffi-polonius/Cargo.toml   |  10 +-
 .../ffi-polonius/vendor/log/Cargo.toml        |   2 +-
 .../ffi-polonius/vendor/log/src/lib.rs        | 138 ------------------
 libgrust/libformat_parser/.cargo/config       |   5 -
 .../libformat_parser}/.cargo/config.toml      |   0
 libgrust/libformat_parser/Makefile.am         |  11 +-
 libgrust/libformat_parser/Makefile.in         |  10 +-
 .../generic_format_parser/src/lib.rs          |  14 ++
 libgrust/libformat_parser/src/lib.rs          |  11 ++
 10 files changed, 41 insertions(+), 170 deletions(-)
 delete mode 100644 libgrust/libformat_parser/.cargo/config
 rename {gcc/rust/checks/errors/borrowck/ffi-polonius => 
libgrust/libformat_parser}/.cargo/config.toml (100%)

diff --git a/gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.lock 
b/gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.lock
index f7cbd414caf..1b223b65556 100644
--- a/gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.lock
+++ b/gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.lock
@@ -1,12 +1,8 @@
 # This file is automatically @generated by Cargo.
 # It is not intended for manual editing.
-version = 3
-
 [[package]]
 name = "datafrog"
 version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a0afaad2b26fa326569eb264b1363e8ae3357618c43982b3f285f0774ce76b69"
 
 [[package]]
 name = "ffi-polonius"
@@ -18,14 +14,10 @@ dependencies = [
 [[package]]
 name = "log"
 version = "0.4.22"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
 
 [[package]]
 name = "polonius-engine"
 version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c4e8e505342045d397d0b6674dcb82d6faf5cf40484d30eeb88fc82ef14e903f"
 dependencies = [
  "datafrog",
  "log",
@@ -35,5 +27,3 @@ dependencies = [
 [[package]]
 name = "rustc-hash"
 version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
diff --git a/gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.toml 
b/gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.toml
index 71315c3b635..3bc8e3f873e 100644
--- a/gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.toml
+++ b/gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.toml
@@ -1,11 +1,17 @@
 [package]
 name = "ffi-polonius"
 version = "0.1.0"
-edition = "2021"
+edition = "2018"
 license = "GPL-3"
 
 [lib]
 crate-type = ["staticlib"]
 
 [dependencies]
-polonius-engine = "0.13.0"
\ No newline at end of file
+polonius-engine = "0.13.0"
+
+[patch.crates-io]
+log = { path = "vendor/log" }
+datafrog = { path = "vendor/datafrog" }
+polonius-engine = { path = "vendor/polonius-engine" }
+rustc-hash = { path = "vendor/rustc-hash" }
diff --git a/gcc/rust/checks/errors/borrowck/ffi-polonius/vendor/log/Cargo.toml 
b/gcc/rust/checks/errors/borrowck/ffi-polonius/vendor/log/Cargo.toml
index 313a0051ae5..a199e317010 100644
--- a/gcc/rust/checks/errors/borrowck/ffi-polonius/vendor/log/Cargo.toml
+++ b/gcc/rust/checks/errors/borrowck/ffi-polonius/vendor/log/Cargo.toml
@@ -10,7 +10,7 @@
 # See Cargo.toml.orig for the original contents.
 
 [package]
-edition = "2021"
+edition = "2018"
 rust-version = "1.60.0"
 name = "log"
 version = "0.4.22"
diff --git a/gcc/rust/checks/errors/borrowck/ffi-polonius/vendor/log/src/lib.rs 
b/gcc/rust/checks/errors/borrowck/ffi-polonius/vendor/log/src/lib.rs
index 6b43a9ae16d..603bbacb18c 100644
--- a/gcc/rust/checks/errors/borrowck/ffi-polonius/vendor/log/src/lib.rs
+++ b/gcc/rust/checks/errors/borrowck/ffi-polonius/vendor/log/src/lib.rs
@@ -397,20 +397,13 @@ mod serde;
 #[cfg(feature = "kv")]
 pub mod kv;
 
-#[cfg(target_has_atomic = "ptr")]
-use std::sync::atomic::{AtomicUsize, Ordering};
-
-#[cfg(not(target_has_atomic = "ptr"))]
 use std::cell::Cell;
-#[cfg(not(target_has_atomic = "ptr"))]
 use std::sync::atomic::Ordering;
 
-#[cfg(not(target_has_atomic = "ptr"))]
 struct AtomicUsize {
     v: Cell<usize>,
 }
 
-#[cfg(not(target_has_atomic = "ptr"))]
 impl AtomicUsize {
     const fn new(v: usize) -> AtomicUsize {
         AtomicUsize { v: Cell::new(v) }
@@ -423,26 +416,10 @@ impl AtomicUsize {
     fn store(&self, val: usize, _order: Ordering) {
         self.v.set(val)
     }
-
-    #[cfg(target_has_atomic = "ptr")]
-    fn compare_exchange(
-        &self,
-        current: usize,
-        new: usize,
-        _success: Ordering,
-        _failure: Ordering,
-    ) -> Result<usize, usize> {
-        let prev = self.v.get();
-        if current == prev {
-            self.v.set(new);
-        }
-        Ok(prev)
-    }
 }
 
 // Any platform without atomics is unlikely to have multiple cores, so
 // writing via Cell will not be a race condition.
-#[cfg(not(target_has_atomic = "ptr"))]
 unsafe impl Sync for AtomicUsize {}
 
 // The LOGGER static holds a pointer to the global logger. It is protected by
@@ -1258,17 +1235,6 @@ where
     }
 }
 
-/// Sets the global maximum log level.
-///
-/// Generally, this should only be called by the active logging implementation.
-///
-/// Note that `Trace` is the maximum level, because it provides the maximum 
amount of detail in the emitted logs.
-#[inline]
-#[cfg(target_has_atomic = "ptr")]
-pub fn set_max_level(level: LevelFilter) {
-    MAX_LOG_LEVEL_FILTER.store(level as usize, Ordering::Relaxed);
-}
-
 /// A thread-unsafe version of [`set_max_level`].
 ///
 /// This function is available on all platforms, even those that do not have
@@ -1320,110 +1286,6 @@ pub fn max_level() -> LevelFilter {
     unsafe { mem::transmute(MAX_LOG_LEVEL_FILTER.load(Ordering::Relaxed)) }
 }
 
-/// Sets the global logger to a `Box<Log>`.
-///
-/// This is a simple convenience wrapper over `set_logger`, which takes a
-/// `Box<Log>` rather than a `&'static Log`. See the documentation for
-/// [`set_logger`] for more details.
-///
-/// Requires the `std` feature.
-///
-/// # Errors
-///
-/// An error is returned if a logger has already been set.
-///
-/// [`set_logger`]: fn.set_logger.html
-#[cfg(all(feature = "std", target_has_atomic = "ptr"))]
-pub fn set_boxed_logger(logger: Box<dyn Log>) -> Result<(), SetLoggerError> {
-    set_logger_inner(|| Box::leak(logger))
-}
-
-/// Sets the global logger to a `&'static Log`.
-///
-/// This function may only be called once in the lifetime of a program. Any log
-/// events that occur before the call to `set_logger` completes will be 
ignored.
-///
-/// This function does not typically need to be called manually. Logger
-/// implementations should provide an initialization method that installs the
-/// logger internally.
-///
-/// # Availability
-///
-/// This method is available even when the `std` feature is disabled. However,
-/// it is currently unavailable on `thumbv6` targets, which lack support for
-/// some atomic operations which are used by this function. Even on those
-/// targets, [`set_logger_racy`] will be available.
-///
-/// # Errors
-///
-/// An error is returned if a logger has already been set.
-///
-/// # Examples
-///
-/// ```
-/// use log::{error, info, warn, Record, Level, Metadata, LevelFilter};
-///
-/// static MY_LOGGER: MyLogger = MyLogger;
-///
-/// struct MyLogger;
-///
-/// impl log::Log for MyLogger {
-///     fn enabled(&self, metadata: &Metadata) -> bool {
-///         metadata.level() <= Level::Info
-///     }
-///
-///     fn log(&self, record: &Record) {
-///         if self.enabled(record.metadata()) {
-///             println!("{} - {}", record.level(), record.args());
-///         }
-///     }
-///     fn flush(&self) {}
-/// }
-///
-/// # fn main(){
-/// log::set_logger(&MY_LOGGER).unwrap();
-/// log::set_max_level(LevelFilter::Info);
-///
-/// info!("hello log");
-/// warn!("warning");
-/// error!("oops");
-/// # }
-/// ```
-///
-/// [`set_logger_racy`]: fn.set_logger_racy.html
-#[cfg(target_has_atomic = "ptr")]
-pub fn set_logger(logger: &'static dyn Log) -> Result<(), SetLoggerError> {
-    set_logger_inner(|| logger)
-}
-
-#[cfg(target_has_atomic = "ptr")]
-fn set_logger_inner<F>(make_logger: F) -> Result<(), SetLoggerError>
-where
-    F: FnOnce() -> &'static dyn Log,
-{
-    match STATE.compare_exchange(
-        UNINITIALIZED,
-        INITIALIZING,
-        Ordering::Acquire,
-        Ordering::Relaxed,
-    ) {
-        Ok(UNINITIALIZED) => {
-            unsafe {
-                LOGGER = make_logger();
-            }
-            STATE.store(INITIALIZED, Ordering::Release);
-            Ok(())
-        }
-        Err(INITIALIZING) => {
-            while STATE.load(Ordering::Relaxed) == INITIALIZING {
-                std::hint::spin_loop();
-            }
-            Err(SetLoggerError(()))
-        }
-        _ => Err(SetLoggerError(())),
-    }
-}
-
 /// A thread-unsafe version of [`set_logger`].
 ///
 /// This function is available on all platforms, even those that do not have
diff --git a/libgrust/libformat_parser/.cargo/config 
b/libgrust/libformat_parser/.cargo/config
deleted file mode 100644
index 02369289646..00000000000
--- a/libgrust/libformat_parser/.cargo/config
+++ /dev/null
@@ -1,5 +0,0 @@
-[source.crates-io]
-replace-with = "vendored-sources"
-
-[source.vendored-sources]
-directory = "vendor"
diff --git a/gcc/rust/checks/errors/borrowck/ffi-polonius/.cargo/config.toml 
b/libgrust/libformat_parser/.cargo/config.toml
similarity index 100%
rename from gcc/rust/checks/errors/borrowck/ffi-polonius/.cargo/config.toml
rename to libgrust/libformat_parser/.cargo/config.toml
diff --git a/libgrust/libformat_parser/Makefile.am 
b/libgrust/libformat_parser/Makefile.am
index e0e1f45703f..59189c04b31 100644
--- a/libgrust/libformat_parser/Makefile.am
+++ b/libgrust/libformat_parser/Makefile.am
@@ -2,12 +2,9 @@ LIBFORMAT_PARSER = debug/liblibformat_parser.a
 
 all-local: $(LIBFORMAT_PARSER)
 
+RUST_BUILD_DIR=$(PWD)
+
 # TODO: Improve `cargo` invocation with host specific flags, possibly creating 
a $(CARGO) variable?
 $(LIBFORMAT_PARSER): $(srcdir)/Cargo.toml $(srcdir)/src/*.rs
-       cargo \
-         --config $(srcdir)/.cargo/config \
-         build \
-           --offline \
-           --target-dir . \
-           --manifest-path $(srcdir)/Cargo.toml \
-           # FIXME: Not always '--release', right?
+       cd $(srcdir) && \
+       cargo build --offline --target-dir $(RUST_BUILD_DIR)
diff --git a/libgrust/libformat_parser/Makefile.in 
b/libgrust/libformat_parser/Makefile.in
index 526b53dc053..f6c400d8149 100644
--- a/libgrust/libformat_parser/Makefile.in
+++ b/libgrust/libformat_parser/Makefile.in
@@ -263,6 +263,7 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 LIBFORMAT_PARSER = debug/liblibformat_parser.a
+RUST_BUILD_DIR = $(PWD)
 all: all-am
 
 .SUFFIXES:
@@ -428,13 +429,8 @@ all-local: $(LIBFORMAT_PARSER)
 
 # TODO: Improve `cargo` invocation with host specific flags, possibly creating 
a $(CARGO) variable?
 $(LIBFORMAT_PARSER): $(srcdir)/Cargo.toml $(srcdir)/src/*.rs
-       cargo \
-         --config $(srcdir)/.cargo/config \
-         build \
-           --offline \
-           --target-dir . \
-           --manifest-path $(srcdir)/Cargo.toml \
-           # FIXME: Not always '--release', right?
+       cd $(srcdir) && \
+       cargo build --offline --target-dir $(RUST_BUILD_DIR)
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libgrust/libformat_parser/generic_format_parser/src/lib.rs 
b/libgrust/libformat_parser/generic_format_parser/src/lib.rs
index 25f6b0ead17..97967a9b171 100644
--- a/libgrust/libformat_parser/generic_format_parser/src/lib.rs
+++ b/libgrust/libformat_parser/generic_format_parser/src/lib.rs
@@ -32,6 +32,20 @@ use std::iter;
 use std::str;
 use std::string;
 
+// Extension trait for `Option<T>::is_some_and()` which was not a feature in 
Rust 1.49
+pub trait OptionIsSomeAndExt<T> {
+    fn is_some_and(self, f: impl FnOnce(T) -> bool) -> bool;
+}
+
+impl<T> OptionIsSomeAndExt<T> for Option<T> {
+    fn is_some_and(self, f: impl FnOnce(T) -> bool) -> bool {
+        match self {
+            None => false,
+            Some(x) => f(x),
+        }
+    }
+}
+
 // Note: copied from rustc_span
 /// Range inside of a `Span` used for diagnostics when we only have access to 
relative positions.
 #[derive(Copy, Clone, PartialEq, Eq, Debug)]
diff --git a/libgrust/libformat_parser/src/lib.rs 
b/libgrust/libformat_parser/src/lib.rs
index d920cfaa63d..72e5971ae80 100644
--- a/libgrust/libformat_parser/src/lib.rs
+++ b/libgrust/libformat_parser/src/lib.rs
@@ -21,6 +21,17 @@ where
     }
 }
 
+// Extension trait to provide `String::leak` which did not exist in Rust 1.49
+pub trait StringLeakExt {
+    fn leak<'a>(self) -> &'a mut str;
+}
+
+impl StringLeakExt for String {
+    fn leak<'a>(self) -> &'a mut str {
+        Box::leak(self.into_boxed_str())
+    }
+}
+
 // FIXME: Make an ffi module in a separate file
 // FIXME: Remember to leak the boxed type somehow
 // FIXME: How to encode the Option type? As a pointer? Option<T> -> Option<&T> 
-> *const T could work maybe?
-- 
2.49.0

Reply via email to