Skip to content

Commit

Permalink
Fixes a bug with the debug_printf and debug_printfln macros not e…
Browse files Browse the repository at this point in the history
…scaping '{' and '}' correctly.

The `debug_printf` and `debug_printfln` passes its format string to the `asm!` macro, which uses `{` and `}` to separate its arguments. Passing `{` and `}` to `asm!` directly is incorrect, and leads to compilation issues:
```
error: invalid asm template string: expected `'}'`, found `'"'`
     --> examples/shaders/sky-shader/src/lib.rs:13016:2
      |
13015 | unsafe{debug_printf!("Variant3{")};
      |        -------------------------- in this macro invocation
13016 |         unsafe{debug_printf!("fld0:")};
      | ----^ expected `'}'` in asm template string
      | |
      | because of this opening brace
      |
      = note: if you intended to print `{`, you can escape it using `{{`
      = note: this error originates in the macro `debug_printf` (in Nightly builds, run with -Z macro-backtrace for more info)
``` 

This commit escapes those characters using `{{` and `}}`, which removes this issue and produces correct behaviour.
  • Loading branch information
FractalFir authored Dec 2, 2024
1 parent d3f9af7 commit a16c91d
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion crates/spirv-std/macros/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -613,7 +613,11 @@ fn debug_printf_inner(input: DebugPrintfInput) -> TokenStream {
.into_iter()
.collect::<proc_macro2::TokenStream>();
let op_loads = op_loads.into_iter().collect::<proc_macro2::TokenStream>();

// Escapes the '{' and '}' characters in the format string.
// Since the `asm!` macro expects '{' '}' to surround its arguments, we have to use '{{' and '}}' instead.
// The `asm!` macro will then later turn them back into '{' and '}'.
let format_string = format_string.replace('{',"{{").replace('}',"}}");

let op_string = format!("%string = OpString {format_string:?}");

let output = quote::quote! {
Expand Down

0 comments on commit a16c91d

Please sign in to comment.