[ https://issues.apache.org/jira/browse/STDCXX-93?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Sebor updated STDCXX-93: ------------------------------- Summary: [MSVC 8.0] time_get crashes when calling get_date (was: time_get crashes when calling get_date ( Visual C++ 8.0 )) Tweaked Summary to conform to convention. > [MSVC 8.0] time_get crashes when calling get_date > ------------------------------------------------- > > Key: STDCXX-93 > URL: https://issues.apache.org/jira/browse/STDCXX-93 > Project: C++ Standard Library > Issue Type: Bug > Components: Examples > Environment: Visual C++ 8.0 > Reporter: Vikas Mehta > Assignee: Martin Sebor > Fix For: 4.2 > > > Test case: > // Following code snippet is taken from examples\manual\time_get.cpp > // NOTE: A SunPro bug requires time.h preceed locale. PR #26255 > #include <ctime> // for struct tm > #include <locale> // for locale, time_get > #include <sstream> // for stringstream > #include <iostream> // for cout, endl > // Print out a tm struct value in one atomic operation > std::ostream& operator<< (std::ostream &os, const std::tm &t) > { > std::stringstream strm; > strm << "Daylight Savings = " << t.tm_isdst > << "\nDay of year = " << t.tm_yday > << "\nDay of week = " << t.tm_wday > << "\nYear = " << t.tm_year > << "\nMonth = " << t.tm_mon > << "\nDay of month = " << t.tm_mday > << "\nHour = " << t.tm_hour > << "\nMinute = " << t.tm_min > << "\nSecond = " << t.tm_sec > << '\n'; > // guard for thread safety and output synchronization > const std::ostream::sentry guard (os); > if (guard) > os.rdbuf ()->sputn (strm.str ().c_str (), strm.str ().size ()); > else > os.setstate (os.failbit); > return os; > } > int main () > { > typedef std::istreambuf_iterator<char, std::char_traits<char> > Iter; > // time struct to parse date into > static std::tm timeb; // zero initialized > // Unused, required by time_get > std::ios_base::iostate state; > // Stream object to read from > std::istringstream ins (""); > // Iterators into the stream object > Iter begin (ins); > Iter end; > // Get a reference to the time_get facet in locale loc. > const std::time_get<char, Iter> &tg = > std::use_facet<std::time_get<char, Iter> >(std::locale ("C")); > // Display time_base::dateorder value. > std::cout << "time_base::dateorder == " << tg.date_order () << ".\n"; > > // Insert date string into stream. > ins.str ("04/07/69"); > // get_date from the stream and output tm contents. > tg.get_date (begin, end, ins, state, &timeb); > std::cout << "Date: Apr 7 1969\n" << timeb << std::endl; > return 0; > } > Stack Trace: > > msvcr80d.dll!_mbstowcs_l_helper(wchar_t * pwcs=0x008e2b78, const char * > > s=0x008e6008, unsigned int n=1812, localeinfo_struct * plocinfo=0x0012f740) > > Line 71 C++ > msvcr80d.dll!_mbstowcs_s_l(unsigned int * pConvertedChars=0x0012f7b0, > wchar_t * pwcs=0x008e2b78, unsigned int sizeInWords=1812, const char * > s=0x008e6008, unsigned int n=4294967295, localeinfo_struct * > plocinfo=0x0012f7d4) Line 259 + 0x30 bytes C++ > msvcr80d.dll!_wcsftime_l_stat(wchar_t * wstring=0x008e2b78, unsigned > int maxsize=1812, const wchar_t * wformat=0x00473980, const tm * > timeptr=0x0012f858, localeinfo_struct * plocinfo=0x0012f7d4) Line 101 + 0x32 > bytes C++ > msvcr80d.dll!_wcsftime_l(wchar_t * wstring=0x008e2b78, unsigned int > maxsize=1812, const wchar_t * wformat=0x00473980, const tm * > timeptr=0x0012f858, localeinfo_struct * plocinfo=0x00000000) Line 152 + 0x1e > bytes C++ > msvcr80d.dll!wcsftime(wchar_t * wstring=0x008e2b78, unsigned int > maxsize=1812, const wchar_t * wformat=0x00473980, const tm * > timeptr=0x0012f858) Line 162 + 0x17 bytes C++ > time_get.exe!__rw::__rw_get_timepunct(const __rw::__rw_facet * > pfacet=0x0049465c, int flags=64, unsigned int inx=0) Line 695 + 0x28 bytes > C++ > time_get.exe!__rw::__rw_get_timepunct(const __rw::__rw_facet * > pfacet=0x0049465c, int flags=64, const void * * names=0x0012fc40, unsigned > int * sizes=0x0012faa8) Line 1115 + 0x11 bytes C++ > time_get.exe!__rw::__rw_get_timepunct(const __rw::__rw_facet * > pfacet=0x0049465c, int * data=0x0012fa4c, tm * tmb=0x0012fa78, int * * > pmem=0x0012fa6c, const void * * names=0x0012fc40, unsigned int * > sizes=0x0012faa8) Line 1452 + 0x23 bytes C++ > > time_get.exe!std::time_get<char,std::istreambuf_iterator<char,std::char_traits<char> > > >::do_get(std::istreambuf_iterator<char,std::char_traits<char> > > __it={...}, std::istreambuf_iterator<char,std::char_traits<char> > > __end={...}, std::ios_base & __fl={...}, __rw::__rw_iostate & > __err=-858993460, tm * __tmb=0x00492518, char __fmt='x', char __modifier=0) > Line 175 + 0x2c bytes C++ > time_get.exe!std::time_get<char,std::istreambuf_iterator< -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.