Target modifiers (special marked options) are recorded in metainfo by azhogin · Pull Request #133138 · rust-lang/rust (original) (raw)
Target modifiers (special marked options) are recorded in metainfo and compared to be equal in different linked crates.
PR for this RFC: rust-lang/rfcs#3716
Option may be marked as TARGET_MODIFIER
, example: regparm: Option<u32> = (None, parse_opt_number, [TRACKED TARGET_MODIFIER]
.
If an TARGET_MODIFIER-marked option has non-default value, it will be recorded in crate metainfo as a Vec<TargetModifier>
:
pub struct TargetModifier {
pub opt: OptionsTargetModifiers,
pub value_name: String,
}
OptionsTargetModifiers is a macro-generated enum.
Option value code (for comparison) is generated using Debug
trait.
Error example:
error: mixing `-Zregparm` will cause an ABI mismatch in crate `incompatible_regparm`
--> $DIR/incompatible_regparm.rs:10:1
|
LL | #![crate_type = "lib"]
| ^
|
= help: the `-Zregparm` flag modifies the ABI so Rust crates compiled with different values of this flag cannot be used together safely
= note: `-Zregparm=1` in this crate is incompatible with `-Zregparm=2` in dependency `wrong_regparm`
= help: set `-Zregparm=2` in this crate or `-Zregparm=1` in `wrong_regparm`
= help: if you are sure this will not cause problems, use `-Cunsafe-allow-abi-mismatch=regparm` to silence this error
error: aborting due to 1 previous error
-Cunsafe-allow-abi-mismatch=regparm,reg-struct-return
to disable list of flags.