]> git.sur5r.net Git - cc65/commitdiff
Warn when structs are passed by value to a function.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 15 Oct 2009 19:18:34 +0000 (19:18 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 15 Oct 2009 19:18:34 +0000 (19:18 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4369 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/declare.c
src/cc65/error.c
src/cc65/error.h

index fbbe5529dbb8be3636b04bdaf7c81a2f8e1f2a89..40235ea8427e10c0b1ad21d73393f066e04c68fa 100644 (file)
@@ -1167,6 +1167,13 @@ static void ParseAnsiParamList (FuncDesc* F)
        /* Create a symbol table entry */
        AddLocalSym (Decl.Ident, ParamTypeCvt (Decl.Type), Decl.StorageClass, 0);
 
+        /* If the parameter is a struct or union, emit a warning */
+        if (IsClassStruct (Decl.Type)) {
+            if (IS_Get (&WarnStructParam)) {
+                Warning ("Passing struct by value for parameter `%s'", Decl.Ident);
+            }
+        }
+
        /* Count arguments */
                ++F->ParamCount;
 
index 95549216bcf5a8d416a31c8b5b582701222d5680..f73f0a4a0c24dbde36d2b65de714936ed1837d29 100644 (file)
@@ -63,6 +63,7 @@ unsigned WarningCount = 0;
 /* Warning and error options */
 IntStack WarnEnable         = INTSTACK(1);  /* Enable warnings */
 IntStack WarningsAreErrors  = INTSTACK(0);  /* Treat warnings as errors */
+IntStack WarnStructParam    = INTSTACK(1);  /* Warn about structs passed by val */
 IntStack WarnUnusedLabel    = INTSTACK(1);  /* Warn about unused labels */
 IntStack WarnUnusedParam    = INTSTACK(1);  /* Warn about unused parameters */
 IntStack WarnUnusedVar      = INTSTACK(1);  /* Warn about unused variables */
@@ -77,6 +78,7 @@ struct WarnMapEntry {
 static WarnMapEntry WarnMap[] = {
     /* Keep sorted, even if this isn't used for now */
     { &WarningsAreErrors,       "error"                 },
+    { &WarnStructParam,         "struct-param"          },
     { &WarnUnknownPragma,       "unknown-pragma"        },
     { &WarnUnusedLabel,         "unused-label"          },
     { &WarnUnusedParam,         "unused-param"          },
index d51b9093b0c15fca28cb75aeefa1d42ff09878e3..ad66a150650b2a5e7097b81df3e2b40813e45b29 100644 (file)
@@ -60,6 +60,7 @@ extern unsigned WarningCount;
 /* Warning and error options */
 extern IntStack WarnEnable;             /* Enable warnings */
 extern IntStack WarningsAreErrors;      /* Treat warnings as errors */
+extern IntStack WarnStructParam;        /* Warn about structs passed by val */
 extern IntStack WarnUnusedLabel;        /* Warn about unused labels */
 extern IntStack WarnUnusedParam;        /* Warn about unused parameters */
 extern IntStack WarnUnusedVar;          /* Warn about unused variables */