@@ -343,6 +343,8 @@ Py_Main(int argc, wchar_t **argv)
343343 int version = 0 ;
344344 int saw_unbuffered_flag = 0 ;
345345 PyCompilerFlags cf ;
346+ PyObject * warning_option = NULL ;
347+ PyObject * warning_options = NULL ;
346348
347349 cf .cf_flags = 0 ;
348350
@@ -465,7 +467,15 @@ Py_Main(int argc, wchar_t **argv)
465467 break ;
466468
467469 case 'W' :
468- PySys_AddWarnOption (_PyOS_optarg );
470+ if (warning_options == NULL )
471+ warning_options = PyList_New (0 );
472+ if (warning_options == NULL )
473+ Py_FatalError ("failure in handling of -W argument" );
474+ warning_option = PyUnicode_FromWideChar (_PyOS_optarg , -1 );
475+ if (warning_option == NULL )
476+ Py_FatalError ("failure in handling of -W argument" );
477+ PyList_Append (warning_options , warning_option );
478+ Py_DECREF (warning_option );
469479 break ;
470480
471481 case 'X' :
@@ -559,6 +569,12 @@ Py_Main(int argc, wchar_t **argv)
559569 PyMem_RawFree (buf );
560570 }
561571#endif
572+ if (warning_options != NULL ) {
573+ Py_ssize_t i ;
574+ for (i = 0 ; i < PyList_GET_SIZE (warning_options ); i ++ ) {
575+ PySys_AddWarnOptionUnicode (PyList_GET_ITEM (warning_options , i ));
576+ }
577+ }
562578
563579 if (command == NULL && module == NULL && _PyOS_optind < argc &&
564580 wcscmp (argv [_PyOS_optind ], L"-" ) != 0 )
@@ -652,6 +668,7 @@ Py_Main(int argc, wchar_t **argv)
652668 Py_SetProgramName (argv [0 ]);
653669#endif
654670 Py_Initialize ();
671+ Py_XDECREF (warning_options );
655672
656673 if (!Py_QuietFlag && (Py_VerboseFlag ||
657674 (command == NULL && filename == NULL &&
0 commit comments