-missingFields rbinds data_con
- | null field_labels = ([], []) -- Not declared as a record;
- -- But C{} is still valid
- | otherwise
- = (missing_strict_fields, other_missing_fields)
+checkMissingFields :: DataCon -> RenamedRecordBinds -> TcM ()
+checkMissingFields data_con rbinds
+ | null field_labels -- Not declared as a record;
+ -- But C{} is still valid if no strict fields
+ = if any isMarkedStrict field_strs then
+ -- Illegal if any arg is strict
+ addErrTc (missingStrictFields data_con [])
+ else
+ returnM ()
+
+ | otherwise -- A record
+ = checkM (null missing_s_fields)
+ (addErrTc (missingStrictFields data_con missing_s_fields)) `thenM_`
+
+ doptM Opt_WarnMissingFields `thenM` \ warn ->
+ checkM (not (warn && notNull missing_ns_fields))
+ (warnTc True (missingFields data_con missing_ns_fields))
+