Don't check inferred dynamic type arguments against best candidate constraints.
[mono.git] / mcs / tests / dtest-017.cs
1 using System;
2
3 class B<U>
4 {
5 }
6
7 class C<T> : B<T>
8 {
9 }
10
11 interface I<T> : IA<T>
12 {
13 }
14
15 interface IA<U>
16 {
17 }
18
19 struct S<T>
20 {
21 }
22
23 delegate dynamic D (dynamic d);
24
25 class DynamicAssignments
26 {
27         static int Main ()
28         {
29                 dynamic d1 = null;
30                 dynamic d2 = null;
31                 d1 = d2;
32                 d2 = d1;
33
34                 B<object> g1 = null;
35                 B<dynamic> g2 = null;
36                 g1 = g2;
37                 g2 = g1;
38
39                 B<B<object>> g_n1 = null;
40                 B<B<dynamic>> g_n2 = null;
41                 g_n1 = g_n2;
42                 g_n2 = g_n1;
43                 
44                 object[] o = null;
45                 dynamic[] d = o;
46
47                 C<object> a = null;
48                 B<dynamic> b = a;
49                 a = (C<object>)b;
50                 a = (C<dynamic>)b;
51
52                 I<object> io = null;
53                 IA<dynamic> id = io;
54                 
55                 IA<object> ia_o = null;
56                 IA<dynamic> ia_d = ia_o;
57                 
58                 S<dynamic> s_d = new S<dynamic> ();
59                 S<object> s_o = s_d;
60                 S<object>? s_o_n = s_d;
61                 
62                 D del = delegate (object del_arg) {
63                          return (object) null;
64                 };
65
66                 return 0;
67         }
68 }