about summary refs log tree commit diff
path: root/src/test/codegen
diff options
context:
space:
mode:
authorHiroki Noda <kubo39@gmail.com>2021-03-12 08:35:13 +0900
committerHiroki Noda <kubo39@gmail.com>2021-03-12 11:02:25 +0900
commit8357e573466d583991edd28e52433417b49dc4ae (patch)
treec76b6080c2103de1c3b1992117d5c5864bd7ac86 /src/test/codegen
parent4a8b6f708c38342a6c74aa00cf4323774c7381a6 (diff)
downloadrust-8357e573466d583991edd28e52433417b49dc4ae.tar.gz
rust-8357e573466d583991edd28e52433417b49dc4ae.zip
Add support for storing code model to LLVM module IR
This patch avoids undefined behavior by linking different object files.
Also this would it could be propagated properly to LTO.

See https://reviews.llvm.org/D52322 and https://reviews.llvm.org/D52323.

This patch is based on https://github.com/rust-lang/rust/pull/74002
Diffstat (limited to 'src/test/codegen')
-rw-r--r--src/test/codegen/codemodels.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/test/codegen/codemodels.rs b/src/test/codegen/codemodels.rs
new file mode 100644
index 00000000000..6e6dd56ba27
--- /dev/null
+++ b/src/test/codegen/codemodels.rs
@@ -0,0 +1,18 @@
+// revisions: NOMODEL MODEL-SMALL MODEL-KERNEL MODEL-MEDIUM MODEL-LARGE
+//[NOMODEL] compile-flags:
+//[MODEL-SMALL] compile-flags: -C code-model=small
+//[MODEL-KERNEL] compile-flags: --target x86_64-unknown-linux-gnu -C code-model=kernel
+//[MODEL-MEDIUM] compile-flags: -C code-model=medium
+//[MODEL-LARGE] compile-flags: -C code-model=large
+
+#![crate_type = "lib"]
+
+// MODEL-SMALL: !llvm.module.flags = !{{{.*}}}
+// MODEL-SMALL: !{{[0-9]+}} = !{i32 1, !"Code Model", i32 1}
+// MODEL-KERNEL: !llvm.module.flags = !{{{.*}}}
+// MODEL-KERNEL: !{{[0-9]+}} = !{i32 1, !"Code Model", i32 2}
+// MODEL-MEDIUM: !llvm.module.flags = !{{{.*}}}
+// MODEL-MEDIUM: !{{[0-9]+}} = !{i32 1, !"Code Model", i32 3}
+// MODEL-LARGE: !llvm.module.flags = !{{{.*}}}
+// MODEL-LARGE: !{{[0-9]+}} = !{i32 1, !"Code Model", i32 4}
+// NOMODEL-NOT: Code Model