]> git.sur5r.net Git - cc65/commitdiff
Added warning diagnostics for conflicts between extern/public and static declarations.
authorGreg King <gregdk@users.sf.net>
Mon, 10 Aug 2015 17:39:17 +0000 (13:39 -0400)
committerGreg King <gregdk@users.sf.net>
Mon, 10 Aug 2015 17:39:17 +0000 (13:39 -0400)
src/cc65/symtab.c

index 0e4de4ea2c2957e8661a69d52f5e85fc1ffbc08a..fdf45987370581f3d833104d92f937c4080b7d70 100644 (file)
@@ -813,11 +813,25 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags)
             }
         }
 
+        /* If a static declaration follows a non-static declaration, then
+        ** warn about the conflict.  (It will compile a public declaration.)
+        */
+        if ((Flags & SC_EXTERN) == 0 && (Entry->Flags & SC_EXTERN) != 0) {
+            Warning ("static declaration follows non-static declaration of `%s'.", Name);
+        }
+
         /* An extern declaration must not change the current linkage. */
         if (IsFunc || (Flags & (SC_EXTERN | SC_DEF)) == SC_EXTERN) {
             Flags &= ~SC_EXTERN;
         }
 
+        /* If a public declaration follows a static declaration, then
+        ** warn about the conflict.  (It will compile a public declaration.)
+        */
+        if ((Flags & SC_EXTERN) != 0 && (Entry->Flags & SC_EXTERN) == 0) {
+            Warning ("public declaration follows static declaration of `%s'.", Name);
+        }
+
         /* Add the new flags */
         Entry->Flags |= Flags;