+2013-11-29 Joseph Myers <joseph@codesourcery.com>
+
+ PR c/57574
+ * c-decl.c (merge_decls): Clear DECL_EXTERNAL for a definition of
+ an inline function following a static declaration.
+
2013-11-28 Jakub Jelinek <jakub@redhat.com>
PR c/59310
&& !current_function_decl)
DECL_EXTERNAL (newdecl) = 0;
+ /* An inline definition following a static declaration is not
+ DECL_EXTERNAL. */
+ if (new_is_definition
+ && (DECL_DECLARED_INLINE_P (newdecl)
+ || DECL_DECLARED_INLINE_P (olddecl))
+ && !TREE_PUBLIC (olddecl))
+ DECL_EXTERNAL (newdecl) = 0;
+
if (DECL_EXTERNAL (newdecl))
{
TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
+2013-11-29 Joseph Myers <joseph@codesourcery.com>
+
+ PR c/57574
+ * gcc.dg/inline-35.c: New test.
+
2013-11-28 Jakub Jelinek <jakub@redhat.com>
PR c++/59297
--- /dev/null
+/* A function definition of an inline function following a static
+ declaration does not make an inline definition in C99/C11 terms.
+ PR 57574. */
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -pedantic-errors" } */
+
+static int n;
+
+static inline int f1 (void);
+inline int f1 (void) { return n; }
+
+static int f2 (void);
+inline int f2 (void) { return n; }
+
+static inline int f3 (void);
+int f3 (void) { return n; }
+
+static int f4 (void);
+int f4 (void) { return n; }