about summary refs log tree commit diff
path: root/src/test/ui/polymorphization
diff options
context:
space:
mode:
authorDavid Wood <david@davidtw.co>2020-08-09 11:22:50 +0100
committerDavid Wood <david@davidtw.co>2020-08-10 13:23:19 +0100
commit20f4e168249ca0828b7297942d47040c59376fbe (patch)
tree65af6a6519afdd83ec8ace1762ac573b960167cf /src/test/ui/polymorphization
parent3f091baba4fa656adb4c1a57b64aa831002d801d (diff)
downloadrust-20f4e168249ca0828b7297942d47040c59376fbe.tar.gz
rust-20f4e168249ca0828b7297942d47040c59376fbe.zip
polymorphize: constrain unevaluated const handling
This commit constrains the support added for handling unevaluated consts
in polymorphization (introduced in #75260) by:

- Skipping associated constants as this causes cycle errors.
- Skipping promoted constants when they contain `Self` as this ensures
  `T` is used in constants of the form `<Self as Foo<T>>`.

Signed-off-by: David Wood <david@davidtw.co>
Diffstat (limited to 'src/test/ui/polymorphization')
-rw-r--r--src/test/ui/polymorphization/promoted-function-3.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/test/ui/polymorphization/promoted-function-3.rs b/src/test/ui/polymorphization/promoted-function-3.rs
new file mode 100644
index 00000000000..1c84df13e10
--- /dev/null
+++ b/src/test/ui/polymorphization/promoted-function-3.rs
@@ -0,0 +1,14 @@
+// run-pass
+// compile-flags: -Zpolymorphize=on -Zmir-opt-level=3
+
+fn caller<T, U>() -> &'static usize {
+    callee::<U>()
+}
+
+fn callee<T>() -> &'static usize {
+    &std::mem::size_of::<T>()
+}
+
+fn main() {
+    assert_eq!(caller::<(), ()>(), &0);
+}