Skip to main content

Options

Struct Options 

Source
#[non_exhaustive]
pub struct Options {
Show 19 fields pub target: Triple, pub opt_level: OptLevel, pub emit: EmitKind, pub debug_info: bool, pub frame_pointer: bool, pub red_zone: bool, pub warnings_are_errors: bool, pub error_limit: u32, pub std: Std, pub gnu_extensions: bool, pub pedantic: bool, pub gnuc: GnucVersion, pub hosted: bool, pub defines: Vec<String>, pub undefines: Vec<String>, pub search: SearchPath, pub line_markers: bool, pub dumps: Dumps, pub rule_coverage: Option<String>,
}
Expand description

Everything a compilation was asked to do.

Options are a plain value with no interior mutability, so a caller can build one, clone it, tweak one field and run a second compilation, which is exactly what the differential testing in spec/15-testing.md needs.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§target: Triple

The target to generate code for.

§opt_level: OptLevel

The optimisation level.

§emit: EmitKind

What to produce.

§debug_info: bool

Whether to emit debug information.

§frame_pointer: bool

Whether every function keeps a frame pointer, from -fno-omit-frame-pointer.

Off by default, which is what gcc does at every level above -O0 and what leaves the register free for the allocator. A profiler that walks the stack by following saved frame pointers needs it on, and so does any code a debugger has to unwind without unwind tables.

§red_zone: bool

Whether the red zone may be used, from -mno-red-zone turned around.

The 128 bytes below the stack pointer that the System V psABI promises no signal handler will touch, which lets a small leaf function keep its locals without moving the stack pointer at all. A kernel turns this off, because an interrupt taken on the kernel stack makes the promise false, and every kernel build in the wild passes -mno-red-zone for exactly that reason. A convention without a red zone ignores this.

§warnings_are_errors: bool

Whether warnings are errors.

§error_limit: u32

How many diagnostics to print before giving up. Past a certain point the output is noise from a single earlier mistake, and GCC’s default of no limit is not a kindness.

§std: Std

The dialect, from -std=.

§gnu_extensions: bool

Whether the GNU extensions are on, which is -std=gnu23 rather than -std=c23.

§pedantic: bool

Whether -pedantic was given, which is what turns a use of an extension from silence into a diagnostic. It is not the same knob as the dialect: -std=c17 -pedantic warns about a construct that -std=c17 alone accepts without a word.

§gnuc: GnucVersion

The GCC release claimed, from -fgnuc-version=.

§hosted: bool

Whether there is a standard library, which is -ffreestanding turned around.

§defines: Vec<String>

-D in command line order. FOO means FOO=1, as GCC has it.

§undefines: Vec<String>

-U in command line order, applied after the defines because -U wins.

§search: SearchPath

Where a header is looked for.

§line_markers: bool

Whether -E writes line markers, which -P turns off.

§dumps: Dumps

What the -d family asks for.

§rule_coverage: Option<String>

Where -Zrule-coverage=FILE writes which lowering rules fired, if it was given.

A measurement rather than a thing a build asks for, which is why it is spelled with a -Z the way an unstable option is everywhere else: it is here for the harness in tamnd/rucc-compat to union over a corpus and report, and nothing about the code that comes out changes when it is on. One file per run of the compiler, holding the whole rule set with the rules this run reached marked, whatever the run compiled and however many files it was.

Implementations§

Source§

impl Options

Source

pub fn new(target: Triple) -> Self

Default options for target.

Trait Implementations§

Source§

impl Clone for Options

Source§

fn clone(&self) -> Options

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Options

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for Options

Source§

impl PartialEq for Options

Source§

fn eq(&self, other: &Options) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Options

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.