about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSimonas Kazlauskas <git@kazlauskas.me>2021-06-06 18:13:27 +0300
committerSimonas Kazlauskas <git@kazlauskas.me>2021-07-08 23:50:12 +0300
commitf4701cd65cf6b3f9707b2bd20865d462f758a7f5 (patch)
treed9bfa7502c8932a361df3f3333190fde3e7b5d38
parent6440785304a4cfff75d707f33bc2105ecfec0004 (diff)
downloadrust-f4701cd65cf6b3f9707b2bd20865d462f758a7f5.tar.gz
rust-f4701cd65cf6b3f9707b2bd20865d462f758a7f5.zip
Do not allow JSON targets to set is-builtin: true
-rw-r--r--compiler/rustc_target/src/spec/mod.rs4
-rw-r--r--src/test/run-make-fulldeps/rustdoc-target-spec-json-path/target.json1
-rw-r--r--src/test/run-make-fulldeps/target-specs/Makefile2
-rw-r--r--src/test/run-make-fulldeps/target-specs/definitely-not-builtin-target.json7
-rw-r--r--src/test/run-make-fulldeps/target-specs/mismatching-data-layout.json6
5 files changed, 19 insertions, 1 deletions
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
index 0a5f8c17c63..5ad5168a517 100644
--- a/compiler/rustc_target/src/spec/mod.rs
+++ b/compiler/rustc_target/src/spec/mod.rs
@@ -2010,6 +2010,10 @@ impl Target {
         key!(supported_sanitizers, SanitizerSet)?;
         key!(default_adjusted_cabi, Option<Abi>)?;
 
+        if base.is_builtin {
+            // This can cause unfortunate ICEs later down the line.
+            return Err(format!("may not set is_builtin for targets not built-in"));
+        }
         // Each field should have been read using `Json::remove_key` so any keys remaining are unused.
         let remaining_keys = obj.as_object().ok_or("Expected JSON object for target")?.keys();
         Ok((
diff --git a/src/test/run-make-fulldeps/rustdoc-target-spec-json-path/target.json b/src/test/run-make-fulldeps/rustdoc-target-spec-json-path/target.json
index 58e924a9895..34357182c20 100644
--- a/src/test/run-make-fulldeps/rustdoc-target-spec-json-path/target.json
+++ b/src/test/run-make-fulldeps/rustdoc-target-spec-json-path/target.json
@@ -8,7 +8,6 @@
   "executables": true,
   "has-elf-tls": true,
   "has-rpath": true,
-  "is-builtin": true,
   "linker-is-gnu": true,
   "llvm-target": "x86_64-unknown-linux-gnu",
   "max-atomic-width": 64,
diff --git a/src/test/run-make-fulldeps/target-specs/Makefile b/src/test/run-make-fulldeps/target-specs/Makefile
index aff15ce38b4..dff7a966c96 100644
--- a/src/test/run-make-fulldeps/target-specs/Makefile
+++ b/src/test/run-make-fulldeps/target-specs/Makefile
@@ -7,3 +7,5 @@ all:
 	RUST_TARGET_PATH=. $(RUSTC) foo.rs --target=my-awesome-platform --crate-type=lib --emit=asm
 	RUST_TARGET_PATH=. $(RUSTC) foo.rs --target=my-x86_64-unknown-linux-gnu-platform --crate-type=lib --emit=asm
 	$(RUSTC) -Z unstable-options --target=my-awesome-platform.json --print target-spec-json > $(TMPDIR)/test-platform.json && $(RUSTC) -Z unstable-options --target=$(TMPDIR)/test-platform.json --print target-spec-json | diff -q $(TMPDIR)/test-platform.json -
+	$(RUSTC) foo.rs --target=definitely-not-builtin-target 2>&1 | $(CGREP) 'may not set is_builtin'
+	$(RUSTC) foo.rs --target=mismatching-data-layout
diff --git a/src/test/run-make-fulldeps/target-specs/definitely-not-builtin-target.json b/src/test/run-make-fulldeps/target-specs/definitely-not-builtin-target.json
new file mode 100644
index 00000000000..b36fa993d97
--- /dev/null
+++ b/src/test/run-make-fulldeps/target-specs/definitely-not-builtin-target.json
@@ -0,0 +1,7 @@
+{
+  "arch": "x86_64",
+  "is-builtin": true,
+  "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128",
+  "llvm-target": "x86_64-unknown-unknown-gnu",
+  "target-pointer-width": "64"
+}
diff --git a/src/test/run-make-fulldeps/target-specs/mismatching-data-layout.json b/src/test/run-make-fulldeps/target-specs/mismatching-data-layout.json
new file mode 100644
index 00000000000..d12caaad14a
--- /dev/null
+++ b/src/test/run-make-fulldeps/target-specs/mismatching-data-layout.json
@@ -0,0 +1,6 @@
+{
+  "arch": "x86_64",
+  "data-layout": "e-m:e-i64:16:32:64",
+  "llvm-target": "x86_64-unknown-unknown-gnu",
+  "target-pointer-width": "64"
+}