Don't silently ignore invalid data in target spec
This commit is contained in:
parent
e5f6498d3d
commit
488472d754
@ -861,23 +861,27 @@ impl Target {
|
|||||||
} );
|
} );
|
||||||
($key_name:ident, link_args) => ( {
|
($key_name:ident, link_args) => ( {
|
||||||
let name = (stringify!($key_name)).replace("_", "-");
|
let name = (stringify!($key_name)).replace("_", "-");
|
||||||
if let Some(obj) = obj.find(&name[..]).and_then(|o| o.as_object()) {
|
if let Some(val) = obj.find(&name[..]) {
|
||||||
|
let obj = val.as_object().ok_or_else(|| format!("{}: expected a \
|
||||||
|
JSON object with fields per linker-flavor.", name))?;
|
||||||
let mut args = LinkArgs::new();
|
let mut args = LinkArgs::new();
|
||||||
for (k, v) in obj {
|
for (k, v) in obj {
|
||||||
let k = LinkerFlavor::from_str(&k).ok_or_else(|| {
|
let flavor = LinkerFlavor::from_str(&k).ok_or_else(|| {
|
||||||
format!("{}: '{}' is not a valid value for linker-flavor. \
|
format!("{}: '{}' is not a valid value for linker-flavor. \
|
||||||
Use 'em', 'gcc', 'ld' or 'msvc'", name, k)
|
Use 'em', 'gcc', 'ld' or 'msvc'", name, k)
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let v = v.as_array().map(|a| {
|
let v = v.as_array().ok_or_else(||
|
||||||
a
|
format!("{}.{}: expected a JSON array", name, k)
|
||||||
.iter()
|
)?.iter().enumerate()
|
||||||
.filter_map(|o| o.as_string())
|
.map(|(i,s)| {
|
||||||
.map(|s| s.to_owned())
|
let s = s.as_string().ok_or_else(||
|
||||||
.collect::<Vec<_>>()
|
format!("{}.{}[{}]: expected a JSON string", name, k, i))?;
|
||||||
}).unwrap_or(vec![]);
|
Ok(s.to_owned())
|
||||||
|
})
|
||||||
|
.collect::<Result<Vec<_>, String>>()?;
|
||||||
|
|
||||||
args.insert(k, v);
|
args.insert(flavor, v);
|
||||||
}
|
}
|
||||||
base.options.$key_name = args;
|
base.options.$key_name = args;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"pre-link-args": ["-m64"],
|
"pre-link-args": {"gcc": ["-m64"]},
|
||||||
"data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128",
|
"data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128",
|
||||||
"linker-flavor": "gcc",
|
"linker-flavor": "gcc",
|
||||||
"llvm-target": "x86_64-unknown-linux-gnu",
|
"llvm-target": "x86_64-unknown-linux-gnu",
|
||||||
|
Loading…
Reference in New Issue
Block a user