@@ -1744,8 +1744,12 @@ pub fn driver(cli: Cli) -> anyhow::Result<()> {
17441744 reporter. insts_after += insts ( & ctx. module ) ;
17451745 let input = PathBuf :: from ( file. name ( ) ) ;
17461746 let mut out = match & output {
1747- None => input,
1748- Some ( p) => p. join ( input) ,
1747+ None => ClioPath :: new ( input) ?,
1748+ Some ( p) => {
1749+ let mut p = p. clone ( ) ;
1750+ p. push ( input) ;
1751+ p
1752+ }
17491753 } ;
17501754 if !matches ! (
17511755 emit,
@@ -1763,7 +1767,7 @@ pub fn driver(cli: Cli) -> anyhow::Result<()> {
17631767 let mut buf = vec ! [ ] ;
17641768 * reporter. cg_time . get_or_insert ( Duration :: ZERO ) +=
17651769 try_timeit ( || ctx. save ( & mut buf) ) ?. 1 ;
1766- Path :: new ( & out) . write_anyhow ( buf) ?;
1770+ out. create_with_len ( buf . len ( ) as _ ) ? . write_all ( & buf) ?;
17671771 Zero
17681772 }
17691773 OutputType :: HeaderObj => {
@@ -1774,21 +1778,21 @@ pub fn driver(cli: Cli) -> anyhow::Result<()> {
17741778 obj. write ( )
17751779 } ) ?;
17761780 * reporter. cg_time . get_or_insert ( Duration :: ZERO ) += cg_time;
1777- Path :: new ( & out) . write_anyhow ( vec) ?;
1781+ out. create_with_len ( vec . len ( ) as _ ) ? . write_all ( & vec) ?;
17781782 Zero
17791783 }
17801784 OutputType :: Llvm => {
17811785 out. set_extension ( "ll" ) ;
17821786 let ( m, cg_time) = timeit ( || ctx. module . to_string ( ) ) ;
17831787 * reporter. cg_time . get_or_insert ( Duration :: ZERO ) += cg_time;
1784- Path :: new ( & out) . write_anyhow ( m ) ?;
1788+ out. create_with_len ( m . len ( ) as _ ) ? . write_all ( m . as_bytes ( ) ) ?;
17851789 Zero
17861790 }
17871791 OutputType :: Bitcode => {
17881792 out. set_extension ( "bc" ) ;
17891793 let ( m, cg_time) = timeit ( || ctx. module . write_bitcode_to_memory ( ) ) ;
17901794 * reporter. cg_time . get_or_insert ( Duration :: ZERO ) += cg_time;
1791- Path :: new ( & out) . write_anyhow ( m. as_slice ( ) ) ?;
1795+ out. create_with_len ( m . get_size ( ) as _ ) ? . write_all ( m. as_slice ( ) ) ?;
17921796 Zero
17931797 }
17941798 OutputType :: Assembly => {
@@ -1802,7 +1806,7 @@ pub fn driver(cli: Cli) -> anyhow::Result<()> {
18021806 . unwrap ( )
18031807 } ) ;
18041808 * reporter. cg_time . get_or_insert ( Duration :: ZERO ) += cg_time;
1805- Path :: new ( & out) . write_anyhow ( m. as_slice ( ) ) ?;
1809+ out. create_with_len ( m . get_size ( ) as _ ) ? . write_all ( m. as_slice ( ) ) ?;
18061810 Zero
18071811 }
18081812 _ => {
@@ -1838,16 +1842,16 @@ pub fn driver(cli: Cli) -> anyhow::Result<()> {
18381842 out. set_extension ( "o" ) ;
18391843 archive. as_mut ( ) . unwrap ( ) . append (
18401844 & ar:: Header :: new (
1841- out. into_raw_vec ( ) ,
1842- mb. as_slice ( ) . len ( ) as _ ,
1845+ out. to_os_string ( ) . into_raw_vec ( ) ,
1846+ mb. get_size ( ) as _ ,
18431847 ) ,
18441848 mb. as_slice ( ) ,
18451849 ) ?;
18461850 Zero
18471851 }
18481852 OutputType :: RawObject => {
18491853 out. set_extension ( "raw.o" ) ;
1850- std :: fs :: write ( out, mb. as_slice ( ) ) ?;
1854+ out. create_with_len ( mb . get_size ( ) as _ ) ? . write_all ( mb. as_slice ( ) ) ?;
18511855 Zero
18521856 }
18531857 OutputType :: Object => {
@@ -1858,7 +1862,7 @@ pub fn driver(cli: Cli) -> anyhow::Result<()> {
18581862 obj:: get_writeable_object_from_file ( parsed_llvm_object) ;
18591863 libs:: populate_header ( & mut writeable_object, & ctx) ;
18601864 let buf = writeable_object. write ( ) ?;
1861- Path :: new ( & out) . write_anyhow ( buf) ?;
1865+ out. create_with_len ( buf . len ( ) as _ ) ? . write_all ( & buf) ?;
18621866 Zero
18631867 }
18641868 x => unreachable ! ( "{x:?} has already been handled" ) ,
0 commit comments