Skip to content

Commit 0213461

Browse files
authored
Rollup merge of #111057 - xfix:tcpstream-as-raw-fd-inline, r=m-ou-se
Make sure the implementation of TcpStream::as_raw_fd is fully inlined Currently the following function: ```rust use std::os::fd::{AsRawFd, RawFd}; use std::net::TcpStream; pub fn as_raw_fd(socket: &TcpStream) -> RawFd { socket.as_raw_fd() } ``` Is optimized to the following: ```asm example::as_raw_fd: push rax call qword ptr [rip + <std::net::tcp::TcpStream as std::sys_common::AsInner<std::sys_common::net::TcpStream>>::as_inner@GOTPCREL] mov rdi, rax call qword ptr [rip + std::sys_common::net::TcpStream::socket@GOTPCREL] mov rdi, rax pop rax jmp qword ptr [rip + _ZN73_$LT$std..sys..unix..net..Socket$u20$as$u20$std..os..fd..raw..AsRawFd$GT$9as_raw_fd17h633bcf7e481df8bbE@GOTPCREL] ``` I think it would make more sense to inline trivial functions used within `TcpStream::AsRawFd`.
2 parents 0a2562b + 500a8e1 commit 0213461

File tree

26 files changed

+69
-0
lines changed

26 files changed

+69
-0
lines changed

library/std/src/fs.rs

+8
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,7 @@ impl File {
709709
// `AsRawHandle`/`IntoRawHandle`/`FromRawHandle` on Windows.
710710

711711
impl AsInner<fs_imp::File> for File {
712+
#[inline]
712713
fn as_inner(&self) -> &fs_imp::File {
713714
&self.inner
714715
}
@@ -1087,12 +1088,14 @@ impl OpenOptions {
10871088
}
10881089

10891090
impl AsInner<fs_imp::OpenOptions> for OpenOptions {
1091+
#[inline]
10901092
fn as_inner(&self) -> &fs_imp::OpenOptions {
10911093
&self.0
10921094
}
10931095
}
10941096

10951097
impl AsInnerMut<fs_imp::OpenOptions> for OpenOptions {
1098+
#[inline]
10961099
fn as_inner_mut(&mut self) -> &mut fs_imp::OpenOptions {
10971100
&mut self.0
10981101
}
@@ -1352,6 +1355,7 @@ impl fmt::Debug for Metadata {
13521355
}
13531356

13541357
impl AsInner<fs_imp::FileAttr> for Metadata {
1358+
#[inline]
13551359
fn as_inner(&self) -> &fs_imp::FileAttr {
13561360
&self.0
13571361
}
@@ -1604,6 +1608,7 @@ impl FileType {
16041608
}
16051609

16061610
impl AsInner<fs_imp::FileType> for FileType {
1611+
#[inline]
16071612
fn as_inner(&self) -> &fs_imp::FileType {
16081613
&self.0
16091614
}
@@ -1616,6 +1621,7 @@ impl FromInner<fs_imp::FilePermissions> for Permissions {
16161621
}
16171622

16181623
impl AsInner<fs_imp::FilePermissions> for Permissions {
1624+
#[inline]
16191625
fn as_inner(&self) -> &fs_imp::FilePermissions {
16201626
&self.0
16211627
}
@@ -1770,6 +1776,7 @@ impl fmt::Debug for DirEntry {
17701776
}
17711777

17721778
impl AsInner<fs_imp::DirEntry> for DirEntry {
1779+
#[inline]
17731780
fn as_inner(&self) -> &fs_imp::DirEntry {
17741781
&self.0
17751782
}
@@ -2510,6 +2517,7 @@ impl DirBuilder {
25102517
}
25112518

25122519
impl AsInnerMut<fs_imp::DirBuilder> for DirBuilder {
2520+
#[inline]
25132521
fn as_inner_mut(&mut self) -> &mut fs_imp::DirBuilder {
25142522
&mut self.inner
25152523
}

library/std/src/net/tcp.rs

+2
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,7 @@ impl Write for &TcpStream {
691691
}
692692

693693
impl AsInner<net_imp::TcpStream> for TcpStream {
694+
#[inline]
694695
fn as_inner(&self) -> &net_imp::TcpStream {
695696
&self.0
696697
}
@@ -1033,6 +1034,7 @@ impl Iterator for IntoIncoming {
10331034
impl FusedIterator for IntoIncoming {}
10341035

10351036
impl AsInner<net_imp::TcpListener> for TcpListener {
1037+
#[inline]
10361038
fn as_inner(&self) -> &net_imp::TcpListener {
10371039
&self.0
10381040
}

library/std/src/net/udp.rs

+1
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,7 @@ impl UdpSocket {
788788
// `AsRawSocket`/`IntoRawSocket`/`FromRawSocket` on Windows.
789789

790790
impl AsInner<net_imp::UdpSocket> for UdpSocket {
791+
#[inline]
791792
fn as_inner(&self) -> &net_imp::UdpSocket {
792793
&self.0
793794
}

library/std/src/os/linux/process.rs

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ pub struct PidFd {
5252
}
5353

5454
impl AsInner<FileDesc> for PidFd {
55+
#[inline]
5556
fn as_inner(&self) -> &FileDesc {
5657
&self.inner
5758
}
@@ -70,6 +71,7 @@ impl IntoInner<FileDesc> for PidFd {
7071
}
7172

7273
impl AsRawFd for PidFd {
74+
#[inline]
7375
fn as_raw_fd(&self) -> RawFd {
7476
self.as_inner().as_raw_fd()
7577
}

library/std/src/process.rs

+8
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ pub struct Child {
211211
impl crate::sealed::Sealed for Child {}
212212

213213
impl AsInner<imp::Process> for Child {
214+
#[inline]
214215
fn as_inner(&self) -> &imp::Process {
215216
&self.handle
216217
}
@@ -304,6 +305,7 @@ impl Write for &ChildStdin {
304305
}
305306

306307
impl AsInner<AnonPipe> for ChildStdin {
308+
#[inline]
307309
fn as_inner(&self) -> &AnonPipe {
308310
&self.inner
309311
}
@@ -373,6 +375,7 @@ impl Read for ChildStdout {
373375
}
374376

375377
impl AsInner<AnonPipe> for ChildStdout {
378+
#[inline]
376379
fn as_inner(&self) -> &AnonPipe {
377380
&self.inner
378381
}
@@ -438,6 +441,7 @@ impl Read for ChildStderr {
438441
}
439442

440443
impl AsInner<AnonPipe> for ChildStderr {
444+
#[inline]
441445
fn as_inner(&self) -> &AnonPipe {
442446
&self.inner
443447
}
@@ -1107,12 +1111,14 @@ impl fmt::Debug for Command {
11071111
}
11081112

11091113
impl AsInner<imp::Command> for Command {
1114+
#[inline]
11101115
fn as_inner(&self) -> &imp::Command {
11111116
&self.inner
11121117
}
11131118
}
11141119

11151120
impl AsInnerMut<imp::Command> for Command {
1121+
#[inline]
11161122
fn as_inner_mut(&mut self) -> &mut imp::Command {
11171123
&mut self.inner
11181124
}
@@ -1605,6 +1611,7 @@ impl ExitStatus {
16051611
}
16061612

16071613
impl AsInner<imp::ExitStatus> for ExitStatus {
1614+
#[inline]
16081615
fn as_inner(&self) -> &imp::ExitStatus {
16091616
&self.0
16101617
}
@@ -1884,6 +1891,7 @@ impl From<u8> for ExitCode {
18841891
}
18851892

18861893
impl AsInner<imp::ExitCode> for ExitCode {
1894+
#[inline]
18871895
fn as_inner(&self) -> &imp::ExitCode {
18881896
&self.0
18891897
}

library/std/src/sys/hermit/fd.rs

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ impl FromRawFd for FileDesc {
7575
}
7676

7777
impl AsInner<OwnedFd> for FileDesc {
78+
#[inline]
7879
fn as_inner(&self) -> &OwnedFd {
7980
&self.fd
8081
}

library/std/src/sys/hermit/fs.rs

+3
Original file line numberDiff line numberDiff line change
@@ -367,12 +367,14 @@ impl DirBuilder {
367367
}
368368

369369
impl AsInner<FileDesc> for File {
370+
#[inline]
370371
fn as_inner(&self) -> &FileDesc {
371372
&self.0
372373
}
373374
}
374375

375376
impl AsInnerMut<FileDesc> for File {
377+
#[inline]
376378
fn as_inner_mut(&mut self) -> &mut FileDesc {
377379
&mut self.0
378380
}
@@ -397,6 +399,7 @@ impl AsFd for File {
397399
}
398400

399401
impl AsRawFd for File {
402+
#[inline]
400403
fn as_raw_fd(&self) -> RawFd {
401404
self.0.as_raw_fd()
402405
}

library/std/src/sys/hermit/net.rs

+2
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ impl Socket {
340340
}
341341

342342
impl AsInner<FileDesc> for Socket {
343+
#[inline]
343344
fn as_inner(&self) -> &FileDesc {
344345
&self.0
345346
}
@@ -364,6 +365,7 @@ impl AsFd for Socket {
364365
}
365366

366367
impl AsRawFd for Socket {
368+
#[inline]
367369
fn as_raw_fd(&self) -> RawFd {
368370
self.0.as_raw_fd()
369371
}

library/std/src/sys/sgx/fd.rs

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ impl FileDesc {
6262
}
6363

6464
impl AsInner<Fd> for FileDesc {
65+
#[inline]
6566
fn as_inner(&self) -> &Fd {
6667
&self.fd
6768
}

library/std/src/sys/sgx/net.rs

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ impl Socket {
2424
}
2525

2626
impl AsInner<FileDesc> for Socket {
27+
#[inline]
2728
fn as_inner(&self) -> &FileDesc {
2829
&self.inner
2930
}
@@ -220,6 +221,7 @@ impl TcpStream {
220221
}
221222

222223
impl AsInner<Socket> for TcpStream {
224+
#[inline]
223225
fn as_inner(&self) -> &Socket {
224226
&self.inner
225227
}
@@ -304,6 +306,7 @@ impl TcpListener {
304306
}
305307

306308
impl AsInner<Socket> for TcpListener {
309+
#[inline]
307310
fn as_inner(&self) -> &Socket {
308311
&self.inner
309312
}

library/std/src/sys/solid/net.rs

+2
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ impl FileDesc {
112112
}
113113

114114
impl AsInner<c_int> for FileDesc {
115+
#[inline]
115116
fn as_inner(&self) -> &c_int {
116117
&self.fd
117118
}
@@ -462,6 +463,7 @@ impl Socket {
462463
}
463464

464465
impl AsInner<c_int> for Socket {
466+
#[inline]
465467
fn as_inner(&self) -> &c_int {
466468
self.0.as_inner()
467469
}

library/std/src/sys/unix/fd.rs

+2
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ impl<'a> Read for &'a FileDesc {
481481
}
482482

483483
impl AsInner<OwnedFd> for FileDesc {
484+
#[inline]
484485
fn as_inner(&self) -> &OwnedFd {
485486
&self.0
486487
}
@@ -505,6 +506,7 @@ impl AsFd for FileDesc {
505506
}
506507

507508
impl AsRawFd for FileDesc {
509+
#[inline]
508510
fn as_raw_fd(&self) -> RawFd {
509511
self.0.as_raw_fd()
510512
}

library/std/src/sys/unix/fs.rs

+4
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ impl FileAttr {
547547
}
548548

549549
impl AsInner<stat64> for FileAttr {
550+
#[inline]
550551
fn as_inner(&self) -> &stat64 {
551552
&self.stat
552553
}
@@ -1269,12 +1270,14 @@ impl DirBuilder {
12691270
}
12701271

12711272
impl AsInner<FileDesc> for File {
1273+
#[inline]
12721274
fn as_inner(&self) -> &FileDesc {
12731275
&self.0
12741276
}
12751277
}
12761278

12771279
impl AsInnerMut<FileDesc> for File {
1280+
#[inline]
12781281
fn as_inner_mut(&mut self) -> &mut FileDesc {
12791282
&mut self.0
12801283
}
@@ -1299,6 +1302,7 @@ impl AsFd for File {
12991302
}
13001303

13011304
impl AsRawFd for File {
1305+
#[inline]
13021306
fn as_raw_fd(&self) -> RawFd {
13031307
self.0.as_raw_fd()
13041308
}

library/std/src/sys/unix/l4re.rs

+5
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ pub mod net {
129129
}
130130

131131
impl AsInner<FileDesc> for Socket {
132+
#[inline]
132133
fn as_inner(&self) -> &FileDesc {
133134
&self.0
134135
}
@@ -153,6 +154,7 @@ pub mod net {
153154
}
154155

155156
impl AsRawFd for Socket {
157+
#[inline]
156158
fn as_raw_fd(&self) -> RawFd {
157159
self.0.as_raw_fd()
158160
}
@@ -183,6 +185,7 @@ pub mod net {
183185
unimpl!();
184186
}
185187

188+
#[inline]
186189
pub fn socket(&self) -> &Socket {
187190
&self.inner
188191
}
@@ -305,6 +308,7 @@ pub mod net {
305308
unimpl!();
306309
}
307310

311+
#[inline]
308312
pub fn socket(&self) -> &Socket {
309313
&self.inner
310314
}
@@ -371,6 +375,7 @@ pub mod net {
371375
unimpl!();
372376
}
373377

378+
#[inline]
374379
pub fn socket(&self) -> &Socket {
375380
&self.inner
376381
}

library/std/src/sys/unix/net.rs

+2
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,7 @@ impl Socket {
490490
}
491491

492492
impl AsInner<FileDesc> for Socket {
493+
#[inline]
493494
fn as_inner(&self) -> &FileDesc {
494495
&self.0
495496
}
@@ -514,6 +515,7 @@ impl AsFd for Socket {
514515
}
515516

516517
impl AsRawFd for Socket {
518+
#[inline]
517519
fn as_raw_fd(&self) -> RawFd {
518520
self.0.as_raw_fd()
519521
}

library/std/src/sys/unix/os_str.rs

+1
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ impl IntoInner<Vec<u8>> for Buf {
8989
}
9090

9191
impl AsInner<[u8]> for Buf {
92+
#[inline]
9293
fn as_inner(&self) -> &[u8] {
9394
&self.inner
9495
}

library/std/src/sys/unix/pipe.rs

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ pub fn read2(p1: AnonPipe, v1: &mut Vec<u8>, p2: AnonPipe, v2: &mut Vec<u8>) ->
135135
}
136136

137137
impl AsRawFd for AnonPipe {
138+
#[inline]
138139
fn as_raw_fd(&self) -> RawFd {
139140
self.0.as_raw_fd()
140141
}

0 commit comments

Comments
 (0)