From: Owen Avery <[email protected]>

This should allow the use of gcc diagnostic format specifiers in debug
diagnostics, in exchange for stricter diagnostic quality checks.

gcc/rust/ChangeLog:

        * rust-diagnostics.cc (rust_debug_fmt_at): New function
        definition.
        * rust-diagnostics.h (rust_debug_fmt): New function-like macro
        definition.
        (rust_debug_fmt_at): New function declaration.

Signed-off-by: Owen Avery <[email protected]>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.


Commit on github: 
https://github.com/Rust-GCC/gccrs/commit/9482951a83c9e17f28f377aef98ce2843ea3c651

The commit has NOT been mentioned in any issue.

The commit has been mentioned in the following pull-request(s):
 - https://github.com/Rust-GCC/gccrs/pull/4788

 gcc/rust/rust-diagnostics.cc | 13 +++++++++++++
 gcc/rust/rust-diagnostics.h  |  6 ++++++
 2 files changed, 19 insertions(+)

diff --git a/gcc/rust/rust-diagnostics.cc b/gcc/rust/rust-diagnostics.cc
index a87369c08..498805acc 100644
--- a/gcc/rust/rust-diagnostics.cc
+++ b/gcc/rust/rust-diagnostics.cc
@@ -420,6 +420,19 @@ rust_debug_loc (const location_t location, const char 
*fmt, ...)
   rust_be_inform (location, rval);
 }
 
+void
+rust_debug_fmt_at (const location_t location, const char *fmt, ...)
+{
+  if (!rust_be_debug_p ())
+    return;
+
+  va_list ap;
+
+  va_start (ap, fmt);
+  rust_be_inform (location, expand_message (fmt, ap));
+  va_end (ap);
+}
+
 namespace Rust {
 
 /**
diff --git a/gcc/rust/rust-diagnostics.h b/gcc/rust/rust-diagnostics.h
index 76d784f58..7fe2596e8 100644
--- a/gcc/rust/rust-diagnostics.h
+++ b/gcc/rust/rust-diagnostics.h
@@ -307,4 +307,10 @@ struct Error
 void rust_debug_loc (const location_t location, const char *fmt,
                     ...) ATTRIBUTE_PRINTF_2;
 
+// like rust_debug, but has gcc diagnostic formatting
+#define rust_debug_fmt(...) rust_debug_fmt_at (UNDEF_LOCATION, __VA_ARGS__)
+
+void rust_debug_fmt_at (location_t location, const char *fmt, ...)
+  RUST_ATTRIBUTE_GCC_DIAG (2, 3);
+
 #endif // !defined(RUST_DIAGNOSTICS_H)

base-commit: fde042ef7c7241b40e12b3dabaea90d4298c6fa5
-- 
2.54.0

Reply via email to