my $nested;
 
     if ($x =~ /(struct|union)\s+(\w+)\s*{(.*)}/) {
-       #my $decl_type = $1;
+       my $decl_type = $1;
        $declaration_name = $2;
        my $members = $3;
 
        $members =~ s/DECLARE_HASHTABLE\s*\(([^,)]+), ([^,)]+)\)/unsigned long $1\[1 << (($2) - 1)\]/gos;
 
        create_parameterlist($members, ';', $file);
-       check_sections($file, $declaration_name, "struct", $sectcheck, $struct_actual, $nested);
+       check_sections($file, $declaration_name, $decl_type, $sectcheck, $struct_actual, $nested);
 
        output_declaration($declaration_name,
                           'struct',
     if ($x =~ /enum\s+(\w+)\s*{(.*)}/) {
        $declaration_name = $1;
        my $members = $2;
+       my %_members;
+
        $members =~ s/\s+$//;
 
        foreach my $arg (split ',', $members) {
                print STDERR "${file}:$.: warning: Enum value '$arg' ".
                    "not described in enum '$declaration_name'\n";
            }
-
+           $_members{$arg} = 1;
        }
 
+       while (my ($k, $v) = each %parameterdescs) {
+           if (!exists($_members{$k})) {
+            print STDERR "${file}:$.: warning: Excess enum value " .
+                         "'$k' description in '$declaration_name'\n";
+           }
+        }
+
        output_declaration($declaration_name,
                           'enum',
                           {'enum' => $declaration_name,
                        } else {
                                if ($nested !~ m/\Q$sects[$sx]\E/) {
                                    print STDERR "${file}:$.: warning: " .
-                                       "Excess struct/union/enum/typedef member " .
+                                       "Excess $decl_type member " .
                                        "'$sects[$sx]' " .
                                        "description in '$decl_name'\n";
                                    ++$warnings;