@@ -123,8 +123,13 @@ pub(crate) fn generate_args_file(file_path: &Path, options: &RustdocOptions) ->
123123 Ok ( ( ) )
124124}
125125
126- fn get_doctest_dir ( ) -> io:: Result < TempDir > {
127- TempFileBuilder :: new ( ) . prefix ( "rustdoctest" ) . tempdir ( )
126+ fn get_doctest_dir ( opts : & RustdocOptions ) -> io:: Result < TempDir > {
127+ let mut builder = TempFileBuilder :: new ( ) ;
128+ builder. prefix ( "rustdoctest" ) ;
129+ if opts. codegen_options . save_temps {
130+ builder. disable_cleanup ( true ) ;
131+ }
132+ builder. tempdir ( )
128133}
129134
130135pub ( crate ) fn run ( dcx : DiagCtxtHandle < ' _ > , input : Input , options : RustdocOptions ) {
@@ -197,7 +202,7 @@ pub(crate) fn run(dcx: DiagCtxtHandle<'_>, input: Input, options: RustdocOptions
197202 let externs = options. externs . clone ( ) ;
198203 let json_unused_externs = options. json_unused_externs ;
199204
200- let temp_dir = match get_doctest_dir ( )
205+ let temp_dir = match get_doctest_dir ( & options )
201206 . map_err ( |error| format ! ( "failed to create temporary directory: {error:?}" ) )
202207 {
203208 Ok ( temp_dir) => temp_dir,
@@ -207,6 +212,7 @@ pub(crate) fn run(dcx: DiagCtxtHandle<'_>, input: Input, options: RustdocOptions
207212 crate :: wrap_return ( dcx, generate_args_file ( & args_path, & options) ) ;
208213
209214 let extract_doctests = options. output_format == OutputFormat :: Doctest ;
215+ let save_temps = options. codegen_options . save_temps ;
210216 let result = interface:: run_compiler ( config, |compiler| {
211217 let krate = rustc_interface:: passes:: parse ( & compiler. sess ) ;
212218
@@ -259,7 +265,9 @@ pub(crate) fn run(dcx: DiagCtxtHandle<'_>, input: Input, options: RustdocOptions
259265 eprintln ! ( "{error}" ) ;
260266 // Since some files in the temporary folder are still owned and alive, we need
261267 // to manually remove the folder.
262- let _ = std:: fs:: remove_dir_all ( temp_dir. path ( ) ) ;
268+ if !save_temps {
269+ let _ = std:: fs:: remove_dir_all ( temp_dir. path ( ) ) ;
270+ }
263271 std:: process:: exit ( 1 ) ;
264272 }
265273 } ;
0 commit comments