| use crate::json::ToJson; | |
| use crate::spec::Target; | |
| #[test] | |
| fn report_unused_fields() { | |
| let json = r#" | |
| { | |
| "arch": "powerpc64", | |
| "data-layout": "e-m:e-i64:64-n32:64", | |
| "llvm-target": "powerpc64le-elf", | |
| "target-pointer-width": 64, | |
| "code-mode": "foo" | |
| } | |
| "#; | |
| let result = Target::from_json(json); | |
| eprintln!("{result:#?}"); | |
| assert!(result.is_err()); | |
| } | |
| #[test] | |
| fn custom_arch_propagates_from_json() { | |
| let json = r#" | |
| { | |
| "llvm-target": "x86_64-unknown-none-gnu", | |
| "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", | |
| "arch": "customarch", | |
| "target-endian": "little", | |
| "target-pointer-width": 64, | |
| "os": "customos", | |
| "linker-flavor": "ld.lld", | |
| "linker": "rust-lld", | |
| "executables": true | |
| } | |
| "#; | |
| rustc_span::create_session_if_not_set_then(rustc_span::edition::DEFAULT_EDITION, |_| { | |
| let (target, warnings) = Target::from_json(json).expect("json target parses"); | |
| assert!(warnings.warning_messages().is_empty()); | |
| assert_eq!(target.arch.desc(), "customarch"); | |
| let serialized = target.to_json(); | |
| assert_eq!(serialized["arch"], "customarch"); | |
| }); | |
| } |