210
210
test( no_crate_inject, attr( deny( warnings) ) ) ,
211
211
test( attr( allow( dead_code, deprecated, unused_variables, unused_mut) ) ) ) ]
212
212
213
+ // Don't link to std. We are std.
214
+ #![ no_std]
215
+
216
+ #![ deny( missing_docs) ]
217
+
218
+ // Tell the compiler to link to either panic_abort or panic_unwind
213
219
#![ needs_panic_runtime]
214
220
221
+ // Always use alloc_system during stage0 since jemalloc might be unavailable or
222
+ // disabled (Issue #30592)
223
+ #![ cfg_attr( stage0, feature( alloc_system) ) ]
224
+
225
+ // Turn warnings into errors, but only after stage0, where it can be useful for
226
+ // code to emit warnings during language transitions
227
+ #![ cfg_attr( not( stage0) , deny( warnings) ) ]
228
+
229
+ // std may use features in a platform-specific way
230
+ #![ allow( unused_features) ]
231
+
232
+ // std is implemented with unstable features, many of which are internal
233
+ // compiler details that will never be stable
215
234
#![ feature( alloc) ]
216
235
#![ feature( allow_internal_unstable) ]
217
236
#![ feature( asm) ]
248
267
#![ feature( link_args) ]
249
268
#![ feature( linkage) ]
250
269
#![ feature( macro_reexport) ]
251
- #![ cfg_attr( test, feature( map_values_mut) ) ]
252
270
#![ feature( needs_panic_runtime) ]
253
271
#![ feature( num_bits_bytes) ]
254
272
#![ feature( old_wrapping) ]
284
302
#![ feature( zero_one) ]
285
303
#![ cfg_attr( test, feature( update_panic_count) ) ]
286
304
287
- // Issue# 30592: Systematically use alloc_system during stage0 since jemalloc
288
- // might be unavailable or disabled
289
- #![ cfg_attr( stage0, feature( alloc_system) ) ]
290
-
291
- // Don't link to std. We are std.
292
- #![ no_std]
293
-
294
- #![ deny( missing_docs) ]
295
- #![ allow( unused_features) ] // std may use features in a platform-specific way
296
- #![ cfg_attr( not( stage0) , deny( warnings) ) ]
297
-
305
+ // Explicitly import the prelude. The compiler uses this same unstable attribute
306
+ // to import the prelude implicitly when building crates that depend on std.
298
307
#[ prelude_import]
299
308
#[ allow( unused) ]
300
309
use prelude:: v1:: * ;
301
310
311
+ // Access to Bencher, etc.
302
312
#[ cfg( test) ] extern crate test;
303
313
304
314
// We want to reexport a few macros from core but libcore has already been
@@ -326,11 +336,22 @@ extern crate alloc_system;
326
336
// compiler-rt intrinsics
327
337
extern crate compiler_builtins;
328
338
329
- // Make std testable by not duplicating lang items and other globals. See #2912
339
+ // During testing, this crate is not actually the "real" std library, but rather
340
+ // it links to the real std library, which was compiled from this same source
341
+ // code. So any lang items std defines are conditionally excluded (or else they
342
+ // wolud generate duplicate lang item errors), and any globals it defines are
343
+ // _not_ the globals used by "real" std. So this import, defined only during
344
+ // testing gives test-std access to real-std lang items and globals. See #2912
330
345
#[ cfg( test) ] extern crate std as realstd;
331
346
332
- // NB: These reexports are in the order they should be listed in rustdoc
347
+ // The standard macros that are not built-in to the compiler.
348
+ #[ macro_use]
349
+ mod macros;
350
+
351
+ // The Rust prelude
352
+ pub mod prelude;
333
353
354
+ // Public module declarations and reexports
334
355
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
335
356
pub use core:: any;
336
357
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -363,48 +384,6 @@ pub use core::raw;
363
384
pub use core:: result;
364
385
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
365
386
pub use core:: option;
366
-
367
- pub mod error;
368
-
369
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
370
- pub use alloc:: boxed;
371
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
372
- pub use alloc:: rc;
373
-
374
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
375
- pub use core_collections:: borrow;
376
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
377
- pub use core_collections:: fmt;
378
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
379
- pub use core_collections:: slice;
380
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
381
- pub use core_collections:: str;
382
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
383
- pub use core_collections:: string;
384
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
385
- pub use core_collections:: vec;
386
-
387
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
388
- pub use rustc_unicode:: char;
389
-
390
- /* Exported macros */
391
-
392
- #[ macro_use]
393
- mod macros;
394
-
395
- mod rtdeps;
396
-
397
- /* The Prelude. */
398
-
399
- pub mod prelude;
400
-
401
-
402
- /* Primitive types */
403
-
404
- // NB: slice and str are primitive types too, but their module docs + primitive
405
- // doc pages are inlined from the public re-exports of core_collections::{slice,
406
- // str} above.
407
-
408
387
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
409
388
pub use core:: isize;
410
389
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -415,7 +394,6 @@ pub use core::i16;
415
394
pub use core:: i32;
416
395
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
417
396
pub use core:: i64;
418
-
419
397
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
420
398
pub use core:: usize;
421
399
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -426,46 +404,62 @@ pub use core::u16;
426
404
pub use core:: u32;
427
405
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
428
406
pub use core:: u64;
407
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
408
+ pub use alloc:: boxed;
409
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
410
+ pub use alloc:: rc;
411
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
412
+ pub use core_collections:: borrow;
413
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
414
+ pub use core_collections:: fmt;
415
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
416
+ pub use core_collections:: slice;
417
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
418
+ pub use core_collections:: str;
419
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
420
+ pub use core_collections:: string;
421
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
422
+ pub use core_collections:: vec;
423
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
424
+ pub use rustc_unicode:: char;
429
425
430
- #[ path = "num/f32.rs" ] pub mod f32;
431
- #[ path = "num/f64.rs" ] pub mod f64;
432
-
433
- pub mod ascii;
434
-
435
- /* Common traits */
436
-
437
- pub mod num;
438
-
439
- /* Runtime and platform support */
426
+ pub mod f32;
427
+ pub mod f64;
440
428
441
429
#[ macro_use]
442
430
pub mod thread;
443
-
431
+ pub mod ascii ;
444
432
pub mod collections;
445
433
pub mod env;
434
+ pub mod error;
446
435
pub mod ffi;
447
436
pub mod fs;
448
437
pub mod io;
449
438
pub mod net;
439
+ pub mod num;
450
440
pub mod os;
451
441
pub mod panic;
452
442
pub mod path;
453
443
pub mod process;
454
444
pub mod sync;
455
445
pub mod time;
456
- mod memchr;
457
446
447
+ // Platform-abstraction modules
458
448
#[ macro_use]
459
- #[ path = "sys/common/mod.rs" ] mod sys_common;
460
-
461
- #[ cfg( unix) ]
462
- #[ path = "sys/unix/mod.rs" ] mod sys;
463
- #[ cfg( windows) ]
464
- #[ path = "sys/windows/mod.rs" ] mod sys;
449
+ mod sys_common;
450
+ mod sys;
465
451
466
- pub mod rt ;
452
+ // Private support modules
467
453
mod panicking;
468
454
mod rand;
455
+ mod memchr;
456
+
457
+ // This module just defines per-platform native library dependencies
458
+ mod rtdeps;
459
+
460
+ // The runtime entry point and a few unstable public functions used by the
461
+ // compiler
462
+ pub mod rt;
469
463
470
464
// Some external utilities of the standard library rely on randomness (aka
471
465
// rustc_back::TempDir and tests) and need a way to get at the OS rng we've got
0 commit comments