summaryrefslogtreecommitdiff
path: root/build-aux/check-structs
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2011-10-04 09:26:14 -0700
committerBen Pfaff <blp@nicira.com>2011-10-04 09:26:14 -0700
commitf937ccc2321d9bcb946fca249ec718531553a9bc (patch)
tree503845ac635fcca87dbcf0cf72468f6f5a5c4bd4 /build-aux/check-structs
parent3021ea6074bcc5a5bc7f1434ade97d84759e8d14 (diff)
downloadopenvswitch-f937ccc2321d9bcb946fca249ec718531553a9bc.tar.gz
check-structs: Add check that OFP_ASSERT is checking the right structures.
This avoids a fairly common issue in which a developer cuts and pastes a structure definition and forgets to update the structure name inside the OFP_ASSERT, so that the new structure's size doesn't really get checked at all.
Diffstat (limited to 'build-aux/check-structs')
-rwxr-xr-xbuild-aux/check-structs7
1 files changed, 6 insertions, 1 deletions
diff --git a/build-aux/check-structs b/build-aux/check-structs
index 152c6a214..0849fcf14 100755
--- a/build-aux/check-structs
+++ b/build-aux/check-structs
@@ -187,6 +187,7 @@ def parseStruct():
warn("%s needs %d bytes of tail padding" % (structName, shortage))
size += shortage
types[structName] = {"size": size, "alignment": alignment}
+ return structName
def checkStructs():
if len(sys.argv) < 2:
@@ -223,6 +224,7 @@ header files without extensions.''' % {"argv0": argv0}
global lineNumber
inputFile = open(fileName)
lineNumber = 0
+ lastStruct = None
while getToken():
if token in ("#ifdef", "#ifndef", "#include",
"#endif", "#elif", "#else"):
@@ -243,12 +245,15 @@ header files without extensions.''' % {"argv0": argv0}
while token != ';':
getToken()
elif token in ('struct', 'union'):
- parseStruct()
+ lastStruct = parseStruct()
elif match('OFP_ASSERT') or match('BOOST_STATIC_ASSERT'):
forceMatch('(')
forceMatch('sizeof')
forceMatch('(')
typeName = parseTypeName()
+ if typeName != lastStruct:
+ warn("checking size of %s but %s was most recently defined"
+ % (typeName, lastStruct))
forceMatch(')')
forceMatch('=')
forceMatch('=')