+
+ void gsharedvt_try_at_offset_0<T> (ref T disposable)
+ where T : class, IDisposable {
+ try {
+ disposable.Dispose ();
+ } finally {
+ disposable = null;
+ }
+ }
+
+ [MethodImplAttribute (MethodImplOptions.NoInlining)]
+ static DateTimeOffset gsharedvt_vphi_inner<T> (T t) {
+ return DateTimeOffset.MinValue;
+ }
+
+ static DateTimeOffset gsharedvt_vphi<T> (T t) {
+ int[] arr = new int [10];
+
+ try {
+ DateTimeOffset v;
+ if (arr [0] == 0)
+ v = gsharedvt_vphi_inner (t);
+ else
+ v = gsharedvt_vphi_inner (t);
+ return v;
+ } catch {
+ return DateTimeOffset.MinValue;
+ }
+ }
+
+ static int test_0_gsharedvt_vphi_volatile () {
+ gsharedvt_vphi (0);
+ return 0;
+ }
+
+ struct AStruct3<T1, T2, T3> {
+ T1 t1;
+ T2 t2;
+ T3 t3;
+ }
+
+ interface IFaceIsRef {
+ bool is_ref<T> ();
+ }
+
+ class ClassIsRef : IFaceIsRef {
+ [MethodImplAttribute (MethodImplOptions.NoInlining)]
+ public bool is_ref<T> () {
+ return RuntimeHelpers.IsReferenceOrContainsReferences<T> ();
+ }
+ }
+
+ public static int test_0_isreference_intrins () {
+ IFaceIsRef iface = new ClassIsRef ();
+ if (iface.is_ref<AStruct3<int, int, int>> ())
+ return 1;
+ if (!iface.is_ref<AStruct3<string, int, int>> ())
+ return 2;
+ return 0;
+ }