@@ -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,22 @@ 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 _ ) ?
1796+ . write_all ( m. as_slice ( ) ) ?;
17921797 Zero
17931798 }
17941799 OutputType :: Assembly => {
@@ -1802,7 +1807,8 @@ pub fn driver(cli: Cli) -> anyhow::Result<()> {
18021807 . unwrap ( )
18031808 } ) ;
18041809 * reporter. cg_time . get_or_insert ( Duration :: ZERO ) += cg_time;
1805- Path :: new ( & out) . write_anyhow ( m. as_slice ( ) ) ?;
1810+ out. create_with_len ( m. get_size ( ) as _ ) ?
1811+ . write_all ( m. as_slice ( ) ) ?;
18061812 Zero
18071813 }
18081814 _ => {
@@ -1838,16 +1844,17 @@ pub fn driver(cli: Cli) -> anyhow::Result<()> {
18381844 out. set_extension ( "o" ) ;
18391845 archive. as_mut ( ) . unwrap ( ) . append (
18401846 & ar:: Header :: new (
1841- out. into_raw_vec ( ) ,
1842- mb. as_slice ( ) . len ( ) as _ ,
1847+ out. to_os_string ( ) . into_raw_vec ( ) ,
1848+ mb. get_size ( ) as _ ,
18431849 ) ,
18441850 mb. as_slice ( ) ,
18451851 ) ?;
18461852 Zero
18471853 }
18481854 OutputType :: RawObject => {
18491855 out. set_extension ( "raw.o" ) ;
1850- std:: fs:: write ( out, mb. as_slice ( ) ) ?;
1856+ out. create_with_len ( mb. get_size ( ) as _ ) ?
1857+ . write_all ( mb. as_slice ( ) ) ?;
18511858 Zero
18521859 }
18531860 OutputType :: Object => {
@@ -1858,7 +1865,7 @@ pub fn driver(cli: Cli) -> anyhow::Result<()> {
18581865 obj:: get_writeable_object_from_file ( parsed_llvm_object) ;
18591866 libs:: populate_header ( & mut writeable_object, & ctx) ;
18601867 let buf = writeable_object. write ( ) ?;
1861- Path :: new ( & out) . write_anyhow ( buf) ?;
1868+ out. create_with_len ( buf . len ( ) as _ ) ? . write_all ( & buf) ?;
18621869 Zero
18631870 }
18641871 x => unreachable ! ( "{x:?} has already been handled" ) ,
0 commit comments