aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-decl.cc
diff options
context:
space:
mode:
authorHamza Mahfooz <someguy@effective-light.com>2023-07-31 19:03:47 +0000
committerJoseph Myers <joseph@codesourcery.com>2023-07-31 19:03:47 +0000
commitffc74822468a39324722eef4c4412ea3224ca976 (patch)
tree7b257346376759ccd7b4a037bbcbe8a02af21cbd /gcc/c/c-decl.cc
parentac0e0966ebf08c454d53042a649403e2880ccbc1 (diff)
downloadgcc-ffc74822468a39324722eef4c4412ea3224ca976.zip
gcc-ffc74822468a39324722eef4c4412ea3224ca976.tar.gz
gcc-ffc74822468a39324722eef4c4412ea3224ca976.tar.bz2
c: add -Wmissing-variable-declarations [PR65213]
Resolves: PR c/65213 - Extend -Wmissing-declarations to variables [i.e. add -Wmissing-variable-declarations] gcc/c-family/ChangeLog: PR c/65213 * c.opt (-Wmissing-variable-declarations): New option. gcc/c/ChangeLog: PR c/65213 * c-decl.cc (start_decl): Handle -Wmissing-variable-declarations. gcc/ChangeLog: PR c/65213 * doc/invoke.texi (-Wmissing-variable-declarations): Document new option. gcc/testsuite/ChangeLog: PR c/65213 * gcc.dg/Wmissing-variable-declarations.c: New test. Signed-off-by: Hamza Mahfooz <someguy@effective-light.com>
Diffstat (limited to 'gcc/c/c-decl.cc')
-rw-r--r--gcc/c/c-decl.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
index ecd10eb..1f9eb44 100644
--- a/gcc/c/c-decl.cc
+++ b/gcc/c/c-decl.cc
@@ -5340,6 +5340,7 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
location_t *lastloc /* = NULL */)
{
tree decl;
+ tree old_decl;
tree tem;
tree expr = NULL_TREE;
enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
@@ -5360,7 +5361,9 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
if (!decl || decl == error_mark_node)
return NULL_TREE;
- if (tree lastdecl = lastloc ? lookup_last_decl (decl) : NULL_TREE)
+ old_decl = lookup_last_decl (decl);
+
+ if (tree lastdecl = lastloc ? old_decl : NULL_TREE)
if (lastdecl != error_mark_node)
*lastloc = DECL_SOURCE_LOCATION (lastdecl);
@@ -5372,6 +5375,11 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
&& TREE_PUBLIC (decl))
warning (OPT_Wmain, "%q+D is usually a function", decl);
+ if (warn_missing_variable_declarations && VAR_P (decl)
+ && !DECL_EXTERNAL (decl) && TREE_PUBLIC (decl) && old_decl == NULL_TREE)
+ warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wmissing_variable_declarations,
+ "no previous declaration for %qD", decl);
+
if (initialized)
/* Is it valid for this decl to have an initializer at all?
If not, set INITIALIZED to zero, which will indirectly