tree-inline.c (inlinable_function_p): Don't support inlining functions using varargs.
authorGeoffrey Keating <geoffk@apple.com>
Tue, 29 Apr 2003 23:32:44 +0000 (23:32 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Tue, 29 Apr 2003 23:32:44 +0000 (23:32 +0000)
* tree-inline.c (inlinable_function_p): Don't support inlining
functions using varargs.

Index: testsuite/ChangeLog
* gcc.c-torture/compile/inline-1.c: New file.

From-SVN: r66269

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/inline-1.c [new file with mode: 0644]
gcc/tree-inline.c

index 70b69cc2fd35bc46c7ebc797ae7828c26006dc85..75d3dec41be289b33880b29db996753897c548a8 100644 (file)
@@ -23,6 +23,9 @@
 
 2003-04-29  Geoffrey Keating  <geoffk@apple.com>
 
+       * tree-inline.c (inlinable_function_p): Don't support inlining
+       functions using varargs.
+
        * doc/invoke.texi (Overall Options): Mention -x objective-c-header.
 
        * dwarf2out.c (output_call_frame_info): No need to output EH
index 4a0d42cbea2577395f9dda27af021b7425afce9a..14607687a2073ae2eed7ee09349887df79fdd2e9 100644 (file)
@@ -1,3 +1,7 @@
+2003-04-29  Geoffrey Keating  <geoffk@apple.com>
+
+       * gcc.c-torture/compile/inline-1.c: New file.
+
 2003-04-29  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/10551
diff --git a/gcc/testsuite/gcc.c-torture/compile/inline-1.c b/gcc/testsuite/gcc.c-torture/compile/inline-1.c
new file mode 100644 (file)
index 0000000..23af7cb
--- /dev/null
@@ -0,0 +1,21 @@
+typedef __builtin_va_list va_list;
+
+extern void foo (va_list);
+
+static void
+build_message_string (const char *msg, ...)
+{
+  va_list ap;
+
+  __builtin_va_start (ap, msg);
+  foo (ap);
+  __builtin_va_end (ap);
+}
+
+void
+file_name_as_prefix (f)
+     const char *f;
+{
+  build_message_string ("%s: ", f);
+}
+
index 3a8adc51e2ee8a0aa0a33603ceb1f0280ed6f17e..d1acba3a5f0a326c033e3973172181fc6a19ed5e 100644 (file)
@@ -1008,6 +1008,13 @@ inlinable_function_p (fn, id, nolimit)
   else if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL
           && find_alloca_call (DECL_SAVED_TREE (fn)))
     ;
+  /* Can't inline functions which use varargs.  It's not theoretically
+     impossible, we just don't do it yet; at least one problem is that
+     expand_builtin_next_arg needs to handle the situation.  */
+  else if (TYPE_ARG_TYPES (TREE_TYPE (fn)) != 0
+          && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (TREE_TYPE (fn))))
+              != void_type_node))
+    ;
   /* All is well.  We can inline this function.  Traditionally, GCC
      has refused to inline functions using alloca, or functions whose
      values are returned in a PARALLEL, and a few other such obscure