# Special test cases.  These require tricky build procedures.

proc gcj_special_pr21115 {} {
  global srcdir subdir env

  # ---- PR 21115 -------------------------------------------------------

  if {! [bytecompile_file ${srcdir}/${subdir}/pr21115I.java [pwd]]} {
    fail "bytecompile ${srcdir}/${subdir}/libjava.special/pr21115I.java"
    # FIXME - should use `untested' on all remaining tests.
    # But that is hard.
    return 0
  }
  pass "bytecompile pr21115I.java"

  if {! [gcj_link pr21115 pr21115 [list ${srcdir}/${subdir}/pr21115.java]]} {
    fail "compiling/linking pr21115.java"
    # FIXME
    return 0
  }

  if {! [gcj_invoke pr21115 ${srcdir}/${subdir}/pr21115.out ""]} {
    # FIXME
    return 0
  }

  return 1
}

# Write a .java file and bytecompile it.  Return 0 on failure.
proc gcj_write_and_byte_compile {name contents} {
  set fd [open $name w]
  puts $fd $contents
  close $fd

  if {! [bytecompile_file $name [pwd]]} {
    fail "bytecompile $name"
    # FIXME - should use `untested' on all remaining tests.
    # But that is hard.
    return 0
  }
  pass "bytecompile $name"
  return 1
}

# Check that BC-compiled code lazily throws IllegalAccessError.
proc gcj_special_lazy_illegal_access {} {
  global srcdir subdir env

  # Write and compile the initial files.
  if {! [gcj_write_and_byte_compile LazyA.java {
    public class LazyA {
      public static void m() { }
    }
  }]} {
    return 0
  }
  if {! [gcj_write_and_byte_compile LazyB.java {
    public class LazyB {
      public static void m() { }
      public static void main(String[] args) { }
    }
  }]} {
    return 0
  }

  # Create the expected output file.
  set fd [open Lazy.out w]
  close $fd

  # Now recompile LazyA with different access for m().
  if {! [gcj_write_and_byte_compile LazyA.java {
    public class LazyA {
      private static void m() { }
    }
  }]} {
    return 0
  }

  # Link and run... this should still work, since we don't actually
  # try to call LazyA.m().
  if {! [gcj_link Lazy LazyB {LazyA.class LazyB.class} \
	   additional_flags=-findirect-dispatch]} {
    fail "compiling/linking pr21115.java"
    # FIXME
    return 0
  }

  if {! [gcj_invoke Lazy Lazy.out ""]} {
    # FIXME
    return 0
  }

  return 1
}

gcj_special_pr21115
gcj_special_lazy_illegal_access
