[Bug d/98457] [d] writef!"%s" doesn't work with MonoTime / SysTick
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98457 Iain Buclaw changed: What|Removed |Added Status|UNCONFIRMED |RESOLVED Resolution|--- |FIXED --- Comment #6 from Iain Buclaw --- ICE has been fixed. The library related errors are more to do with the version of the D compiler in tree, rather than an issue with gdc itself.
[Bug d/98457] [d] writef!"%s" doesn't work with MonoTime / SysTick
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98457 --- Comment #5 from CVS Commits --- The releases/gcc-9 branch has been updated by Iain Buclaw : https://gcc.gnu.org/g:fda5b17a89e5066e19371ea138253bbb9cad262a commit r9-9364-gfda5b17a89e5066e19371ea138253bbb9cad262a Author: Iain Buclaw Date: Mon Apr 19 18:45:32 2021 +0200 d: Fix ICE in when formating a string with '%' or '`' characters (PR98457) The percentage character was being confused for a format specifier in pp_format(), whilst the backtick character was confused for the beginning of a quoted string in expand_d_format(). Both are now properly escaped to avoid the ICE. gcc/d/ChangeLog: PR d/98457 * d-diagnostic.cc (expand_d_format): Handle escaped backticks. (escape_d_format): New funtion. (verror): Call escape_d_format on prefixing strings. (vdeprecation): Likewise. gcc/testsuite/ChangeLog: PR d/98457 * gdc.dg/pr98457.d: New test. (cherry picked from commit dc7d1c74ffb1cc85e67984632f581d526c783770)
[Bug d/98457] [d] writef!"%s" doesn't work with MonoTime / SysTick
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98457 --- Comment #4 from CVS Commits --- The releases/gcc-10 branch has been updated by Iain Buclaw : https://gcc.gnu.org/g:19fc127321c7fe3962bd8b6c0064b224ab14aec7 commit r10-9718-g19fc127321c7fe3962bd8b6c0064b224ab14aec7 Author: Iain Buclaw Date: Mon Apr 19 18:45:32 2021 +0200 d: Fix ICE in when formating a string with '%' or '`' characters (PR98457) The percentage character was being confused for a format specifier in pp_format(), whilst the backtick character was confused for the beginning of a quoted string in expand_d_format(). Both are now properly escaped to avoid the ICE. gcc/d/ChangeLog: PR d/98457 * d-diagnostic.cc (expand_d_format): Handle escaped backticks. (escape_d_format): New funtion. (verror): Call escape_d_format on prefixing strings. (vdeprecation): Likewise. gcc/testsuite/ChangeLog: PR d/98457 * gdc.dg/pr98457.d: New test. (cherry picked from commit dc7d1c74ffb1cc85e67984632f581d526c783770)
[Bug d/98457] [d] writef!"%s" doesn't work with MonoTime / SysTick
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98457 --- Comment #3 from CVS Commits --- The master branch has been updated by Iain Buclaw : https://gcc.gnu.org/g:dc7d1c74ffb1cc85e67984632f581d526c783770 commit r11-8250-gdc7d1c74ffb1cc85e67984632f581d526c783770 Author: Iain Buclaw Date: Mon Apr 19 18:45:32 2021 +0200 d: Fix ICE in when formating a string with '%' or '`' characters (PR98457) The percentage character was being confused for a format specifier in pp_format(), whilst the backtick character was confused for the beginning of a quoted string in expand_d_format(). Both are now properly escaped to avoid the ICE. gcc/d/ChangeLog: PR d/98457 * d-diagnostic.cc (expand_d_format): Handle escaped backticks. (escape_d_format): New funtion. (verror): Call escape_d_format on prefixing strings. (vdeprecation): Likewise. gcc/testsuite/ChangeLog: PR d/98457 * gdc.dg/pr98457.d: New test.
[Bug d/98457] [d] writef!"%s" doesn't work with MonoTime / SysTick
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98457 --- Comment #2 from Iain Buclaw --- Reduced test: --- void main() { writef!"%s"; } --- Any error that deals with a symbol that has a formatting string in it will trigger a segmentation fault.
[Bug d/98457] [d] writef!"%s" doesn't work with MonoTime / SysTick
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98457 --- Comment #1 from Witold Baryluk --- Godbolt link: https://godbolt.org/z/q3bzhP with gcc trunk 20201217 and a bit more diagnostic /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/core/time.d:2405:16: error: static variable _ticksPerSecond cannot be read at compile time 2405 | return _ticksPerSecond[_clockIdx]; |^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/core/time.d:2418:99: note: called from here: ticksPerSecond() 2418 | return "MonoTime(" ~ signedToTempString(_ticks, 10) ~ " ticks, " ~ signedToTempString(ticksPerSecond, 10) ~ " ticks per second)"; | ^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/core/time.d:2418:98: note: called from here: signedToTempString(ticksPerSecond(), 10u) 2418 | return "MonoTime(" ~ signedToTempString(_ticks, 10) ~ " ticks, " ~ signedToTempString(ticksPerSecond, 10) ~ " ticks per second)"; | ^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/std/format.d:3353:28: note: called from here: val.toString() 3353 | put(w, val.toString()); |^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/std/format.d:3353:12: note: called from here: put(w, val.toString()) 3353 | put(w, val.toString()); |^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/std/format.d:3672:21: note: called from here: formatObject(w, val, f) 3672 | formatObject(w, val, f); | ^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/std/format.d:568:28: note: called from here: formatValue(w, _param_2, spec) 568 | formatValue(w, args[i], spec); |^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/std/format.d:5767:28: note: called from here: formattedWrite(w, fmt, _param_1) 5767 | auto n = formattedWrite(w, fmt, args); |^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/std/format.d:5729:16: note: called from here: format("%s", MonoTimeImpl(0L)) 5729 | .format(fmt, Args.init); |^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/std/format.d:5733:2: note: called from here: (*function () => null)() 5733 | }(); | ^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/std/stdio.d:3754:15: error: template instance std.format.checkFormatException!("�}�", MonoTimeImpl!cast(ClockType)0) error instantiating 3754 | alias e = checkFormatException!(fmt, A); | ^ :4:14: note: instantiated from here: writef!("%s", MonoTimeImpl!cast(ClockType)0) 4 | writef!"%s"(MonoTime.currTime()); | ^ /opt/compiler-explorer/gcc-trunk-20201227/lib/gcc/x86_64-linux-gnu/11.0.0/include/d/std/stdio.d:3755:5: note: while evaluating: static assert(!e) 3755 | static assert(!e, e.msg); | ^ Compiler returned: 1