diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 82a3ab0e83b97e12933273e94303050381294acf..c24dbe3c421cdb01956bbc81739c13a7a1fafe69 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-20  Jakub Jelinek  <jakub@redhat.com>
+
+	PR tree-optimization/40792
+	* tree.c (build_function_type_skip_args): Remove bogus assert.
+
 2009-07-20  Jan Hubicka  <jh@suse.cz>
             Martin Jambor  <mjambor@suse.cz>
 
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index daac3e82e4e90fb2d104e1bf961525a43d2671f5..2e778c60c0c5b5391f09ff94d98e955626951ee4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-20  Jakub Jelinek  <jakub@redhat.com>
+
+	PR tree-optimization/40792
+	* gcc.dg/pr40792.c: New test.
+
 2009-07-20  Ira Rosen  <irar@il.ibm.com>
 
 	* gcc.dg/vect/vect-cond-1.c, gcc.dg/vect/vect-cond-2.c,
diff --git a/gcc/testsuite/gcc.dg/pr40792.c b/gcc/testsuite/gcc.dg/pr40792.c
new file mode 100644
index 0000000000000000000000000000000000000000..41f080e542ef46a39ec544d762c9802f61dc712c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr40792.c
@@ -0,0 +1,21 @@
+/* PR tree-optimization/40792 */
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+void foo (int, char *, int *);
+
+void
+bar (int *a, int *b, ...)
+{
+  int c;
+  char d[256];
+  foo (*b, d, &c);
+}
+
+static int a, b;
+
+void
+baz (int c)
+{
+  bar (&a, &b);
+}
diff --git a/gcc/tree.c b/gcc/tree.c
index b32e209e83e1fbb01e6af945ad5304320658ea7e..44178aff65ca7b2e2d18da59a0f4e354f4d633f5 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -6299,7 +6299,6 @@ build_function_type_skip_args (tree orig_type, bitmap args_to_skip)
       else
 	new_reversed = void_list_node;
     }
-    gcc_assert (new_reversed);
 
   /* Use copy_node to preserve as much as possible from original type
      (debug info, attribute lists etc.)