diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index bce385b48457000040c198686a725c834b6b6d02..5d2515ace3f1f101c2a5267263405ac8a8230497 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,10 @@
+2006-02-04  Tom Tromey  <tromey@redhat.com>
+
+	PR java/25676:
+	* builtins.c (max_builtin): Skip floating point 'max'.
+	(min_builtin): Skip floating point 'min'.
+	(check_for_builtin): Never return NULL_TREE.
+
 2006-02-04  Tom Tromey  <tromey@redhat.com>
 
 	PR java/26097:
diff --git a/gcc/java/builtins.c b/gcc/java/builtins.c
index ff6da981a0ea80b676745a6a41ebd9dd1bd701bb..5082cd02afc82949230d3b0cce8b1b14cab8c2ea 100644
--- a/gcc/java/builtins.c
+++ b/gcc/java/builtins.c
@@ -1,5 +1,5 @@
 /* Built-in and inline functions for gcj
-   Copyright (C) 2001, 2003, 2004, 2005
+   Copyright (C) 2001, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -94,6 +94,9 @@ static GTY(()) struct builtin_record java_builtins[] =
 static tree
 max_builtin (tree method_return_type, tree method_arguments)
 {
+  /* MAX_EXPR does not handle -0.0 in the Java style.  */
+  if (TREE_CODE (method_return_type) == REAL_TYPE)
+    return NULL_TREE;
   return fold_build2 (MAX_EXPR, method_return_type,
 		      TREE_VALUE (method_arguments),
 		      TREE_VALUE (TREE_CHAIN (method_arguments)));
@@ -102,6 +105,9 @@ max_builtin (tree method_return_type, tree method_arguments)
 static tree
 min_builtin (tree method_return_type, tree method_arguments)
 {
+  /* MIN_EXPR does not handle -0.0 in the Java style.  */
+  if (TREE_CODE (method_return_type) == REAL_TYPE)
+    return NULL_TREE;
   return fold_build2 (MIN_EXPR, method_return_type,
 		      TREE_VALUE (method_arguments),
 		      TREE_VALUE (TREE_CHAIN (method_arguments)));
@@ -265,11 +271,15 @@ check_for_builtin (tree method, tree call)
 	      tree fn;
 
 	      if (java_builtins[i].creator != NULL)
-		return (*java_builtins[i].creator) (method_return_type,
-						    method_arguments);
+		{
+		  tree result
+		    = (*java_builtins[i].creator) (method_return_type,
+						   method_arguments);
+		  return result == NULL_TREE ? call : result;
+		}
 	      fn = built_in_decls[java_builtins[i].builtin_code];
 	      if (fn == NULL_TREE)
-		return NULL_TREE;
+		return call;
 	      return java_build_function_call_expr (fn, method_arguments);
 	    }
 	}
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index bdb0a89adab1294b949249e428a3b428930f997b..970d975a1e87acf5eea3946ebdd101ca332b9b0d 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+2006-02-04  Tom Tromey  <tromey@redhat.com>
+
+	PR java/25676:
+	* testsuite/libjava.lang/pr25676.out: New file.
+	* testsuite/libjava.lang/pr25676.java: New file.
+
 2006-02-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
 
 	* Makefile.am (src.zip): Update src.zip file search to look in
diff --git a/libjava/testsuite/libjava.lang/pr25676.java b/libjava/testsuite/libjava.lang/pr25676.java
new file mode 100644
index 0000000000000000000000000000000000000000..e79a2c23d918e0d8ef7b258fe3d374977bc92b3c
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/pr25676.java
@@ -0,0 +1,12 @@
+public class pr25676
+{
+  public static double g(double a, double b)
+  {
+    return Math.min(a, b);
+  }
+  public static void main(String a[])
+  {
+    System.out.println (g(0.0, -0.0));
+    System.out.println (g(-0.0, 0.0));
+  }
+}
diff --git a/libjava/testsuite/libjava.lang/pr25676.out b/libjava/testsuite/libjava.lang/pr25676.out
new file mode 100644
index 0000000000000000000000000000000000000000..e6ffe0d430bc4cba64935cbf9a998ed5b3ba67dc
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/pr25676.out
@@ -0,0 +1,2 @@
+-0.0
+-0.0