diff --git a/Lib/fontTools/varLib/__init__.py b/Lib/fontTools/varLib/__init__.py
index c97192490..79b08d8ff 100644
--- a/Lib/fontTools/varLib/__init__.py
+++ b/Lib/fontTools/varLib/__init__.py
@@ -426,8 +426,18 @@ def build(designspace_filename, master_finder=lambda s:s):
axis_supports[axis.name] = (axis.minimum, axis.default, axis.maximum)
log.info("Axis supports:\n%s", pformat(axis_supports))
- # TODO
- # check all masters and instances locations are valid and fill in default items
+ # Check all master and instance locations are valid and fill in defaults
+ for obj in masters+instances:
+ obj_name = obj.get('name', obj.get('stylename', ''))
+ loc = obj['location']
+ for name in loc.keys():
+ assert name in axes, "Location axis '%s' unknown for '%s'." % (name, obj_name)
+ for axis_name,axis in axes.items():
+ if axis_name not in loc:
+ loc[axis_name] = axis.default
+ else:
+ v = loc[axis_name]
+ assert axis.minimum <= v <= axis.maximum, "Location for axis '%s' (%s) out of range for '%s'" % (name, v, obj_name)
master_locs = [o['location'] for o in masters]
log.info("Master locations:\n%s", pformat(master_locs))
diff --git a/Tests/varLib/data/Build2.designspace b/Tests/varLib/data/Build2.designspace
index f3f98ab6c..343175eeb 100644
--- a/Tests/varLib/data/Build2.designspace
+++ b/Tests/varLib/data/Build2.designspace
@@ -4,7 +4,6 @@
-