Skip to content

Report stl crash on format with chrono::zoned_time #5626

@Sauterelle57

Description

@Sauterelle57

Describe the bug

I encountered a crash while using std::chrono::zoned_time with std::format.
According to https://en.cppreference.com/w/cpp/chrono/zoned_time.html it's supposed to be supported, my program compiles correctly but crashes on format (see call stack below for more details).

Command-line test case

C:\Temp>type main.cpp
#include <iostream>
#include <chrono>
#include <string>
#include <format>
#include <iostream>

int main()
{
    using namespace std::chrono;

    auto now = floor<seconds>(system_clock::now());
    zoned_time local_zoned{ current_zone(), now };

    std::string ts = std::format("{:%Y%m%d_%H%M%S}", local_zoned);
    std::cout << std::format("../logs/NEXO-{}.log", ts) << std::endl;
    return 0;
}
C:\Temp>cl /EHsc /W4 /WX /std:c++latest .\main.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.41.34120 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

/std:c++latest is provided as a preview of language features from the latest C++
working draft, and we're eager to hear about bugs and suggestions for improvements.
However, note that these features are provided as-is without support, and subject
to changes or removal as the working draft evolves. See
https://go.microsoft.com/fwlink/?linkid=2045807 for details.

main.cpp
Microsoft (R) Incremental Linker Version 14.41.34120.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:main.exe
main.obj
C:\Temp>start /wait .\main.exe
C:\Temp>echo %errorlevel%
-1073740791

Expected behavior

C:\Temp>main.exe
../logs/NEXO-20250626_222325.log
C:\Temp>start /wait .\main.exe
C:\Temp>echo %errorlevel%
0

STL version

  • Option 1: Visual Studio version
    Microsoft Visual Studio Community 2022 (64-bit) - Current
    Version 17.11.3
    

Additional context

cl version

Microsoft (R) C/C++ Optimizing Compiler Version 19.41.34120 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

Windows 11 version

Version 24H2 build 26100.4351

Computer

Laptop Gigabyte G6X 9KG-43FR854SH

Crash details

Unhandled exception at 0x00007FFDC63E85EA in bugStdFormat.exe: Microsoft C++ exception: std::system_error at memory location 0x00000080334FD5F0.

Call stack

 	KernelBase.dll!00007ffdc63e85ea()	Unknown
 	vcruntime140d.dll!00007ffce9219362()	Unknown
 	msvcp140d.dll!00007ffcc9150689()	Unknown
>	bugStdFormat.exe!std::chrono::_Make_unique_tzdb_info<&__std_tzdb_get_sys_info,char const *,unsigned __int64 const &,double>(const char * && <_Args_0>, const unsigned __int64 & <_Args_1>, double && <_Args_2>) Line 1737	C++
 	bugStdFormat.exe!std::chrono::time_zone::_Get_info<std::chrono::duration<__int64,std::ratio<1,1>>>(const std::chrono::duration<__int64,std::ratio<1,1>> & _Dur, __std_tzdb_sys_info_type _Type) Line 1820	C++
 	bugStdFormat.exe!std::chrono::time_zone::get_info<std::chrono::duration<__int64,std::ratio<1,1>>>(const std::chrono::time_point<std::chrono::system_clock,std::chrono::duration<__int64,std::ratio<1,1>>> & _Sys) Line 1764	C++
 	bugStdFormat.exe!std::chrono::zoned_time<std::chrono::duration<__int64,std::ratio<1,1>>,std::chrono::time_zone const *>::get_info() Line 2519	C++
 	bugStdFormat.exe!std::formatter<std::chrono::zoned_time<std::chrono::duration<__int64,std::ratio<1,1>>,std::chrono::time_zone const *>,char>::format<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char>>(const std::chrono::zoned_time<std::chrono::duration<__int64,std::ratio<1,1>>,std::chrono::time_zone const *> & _Val, std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char> & _FormatCtx) Line 5950	C++
 	bugStdFormat.exe!std::basic_format_arg<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char>>::handle::{ctor}::__l1::<lambda_3_>::operator()(std::basic_format_parse_context<char> & _Parse_ctx, std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char> & _Format_ctx, const void * _Ptr) Line 723	C++
 	bugStdFormat.exe!`std::basic_format_arg<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char>>::handle::handle<std::chrono::zoned_time<std::chrono::duration<__int64,std::ratio<1,1>>,std::chrono::time_zone const *>>'::`1'::<lambda_3_>::<lambda_invoker_cdecl>(std::basic_format_parse_context<char> & _Parse_ctx, std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char> & _Format_ctx, const void * _Ptr) Line 725	C++
 	bugStdFormat.exe!std::basic_format_arg<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char>>::handle::format(std::basic_format_parse_context<char> & _Parse_ctx, std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char> & _Format_ctx) Line 729	C++
 	bugStdFormat.exe!std::_Format_handler<char>::_On_format_specs(const unsigned __int64 _Id, const char * _First, const char * _Last) Line 3663	C++
 	bugStdFormat.exe!std::_Parse_replacement_field<char,std::_Format_handler<char> &>(const char * _First, const char * _Last, std::_Format_handler<char> & _Handler) Line 1493	C++
 	bugStdFormat.exe!std::_Parse_format_string<char,std::_Format_handler<char> &>(std::basic_string_view<char,std::char_traits<char>> _Format_str, std::_Format_handler<char> & _Handler) Line 1544	C++
 	bugStdFormat.exe!std::vformat_to<std::back_insert_iterator<std::string>>(std::back_insert_iterator<std::string> _Out, const std::basic_string_view<char,std::char_traits<char>> _Fmt, const std::basic_format_args<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char>> _Args) Line 3778	C++
 	bugStdFormat.exe!std::vformat<0>(const std::basic_string_view<char,std::char_traits<char>> _Fmt, const std::basic_format_args<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>,char>> _Args) Line 3855	C++
 	bugStdFormat.exe!std::format<std::chrono::zoned_time<std::chrono::duration<__int64,std::ratio<1,1>>,std::chrono::time_zone const *> &>(const std::basic_format_string<char,std::chrono::zoned_time<std::chrono::duration<__int64,std::ratio<1,1>>,std::chrono::time_zone const *> &> _Fmt, std::chrono::zoned_time<std::chrono::duration<__int64,std::ratio<1,1>>,std::chrono::time_zone const *> & <_Args_0>) Line 3885	C++
 	bugStdFormat.exe!main() Line 13	C++
 	[External Code]	

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions