+2013-06-18 Sriraman Tallam <tmsriram@google.com>
+
+ * ipa-inline.c (inline_always_inline_functions): Pretend always_inline
+ functions are inlined during failures to flag an error.
+ * tree-inline.c (expand_call_inline): Allow the error to be flagged
+ in early inline pass.
+
2013-06-18 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (initial_ix86_tune_features): Fix a typo
}
if (!can_early_inline_edge_p (e))
- continue;
+ {
+ /* Set inlined to true if the callee is marked "always_inline" but
+ is not inlinable. This will allow flagging an error later in
+ expand_call_inline in tree-inline.c. */
+ if (lookup_attribute ("always_inline",
+ DECL_ATTRIBUTES (callee->symbol.decl)) != NULL)
+ inlined = true;
+ continue;
+ }
if (dump_file)
fprintf (dump_file, " Inlining %s into %s (always_inline).\n",
+2013-06-18 Sriraman Tallam <tmsriram@google.com>
+
+ * gcc.target/i386/inline_error.c: New test.
+ * gcc.c-torture/compile/pr44043.c: Fix test to expect an error.
+ * gcc.c-torture/compile/pr43791.c: Fix test to expect an error.
+
2013-06-18 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/53211
fasttrylock(slowtrylock);
}
+/* { dg-prune-output "(inlining failed in call to always_inline.*indirect function call with a yet undetermined callee|called from here)" } */
{
raw_send_hdrinc(sk, msg->msg_iov, len, (void *)0, msg->msg_flags);
}
+
+/* { dg-prune-output "(inlining failed in call to always_inline.*indirect function call with a yet undetermined callee|called from here)" } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O0 -mno-popcnt" } */
+
+inline int __attribute__ ((__gnu_inline__, __always_inline__, target("popcnt")))
+foo () /* { dg-error "inlining failed in call to always_inline .* target specific option mismatch" } */
+{
+ return 0;
+}
+
+int bar()
+{
+ return foo (); /* { dg-error "called from here" } */
+}
for inlining, but we can't do that because frontends overwrite
the body. */
&& !cg_edge->callee->local.redefined_extern_inline
- /* Avoid warnings during early inline pass. */
- && cgraph_global_info_ready
/* PR 20090218-1_0.c. Body can be provided by another module. */
&& (reason != CIF_BODY_NOT_AVAILABLE || !flag_generate_lto))
{