anchor.diff:          true -> add_error(Line, {redefine_record,Name}, St0);
           false ->
               {Fs1,St1} = def_fields(normalise_fields(Fs0), Name, St0),
  -            St1#lint{records=dict:store(Name, {Line,Fs1}, St1#lint.records)}
  +            St2 = St1#lint{records=dict:store(Name, {Line,Fs1},
  +                                              St1#lint.records)},
  +            Types = [T || {typed_record_field, _, T} <- Fs0],
  +            check_type({type, nowarn(), product, Types}, St2)
       end.
   
   %% def_fields([RecDef], RecordName, State) -> {[DefField],State}.
  
positive.code: 			      [] -> St; % exclude records with no fields
  			      [_|_] -> add_warning(L, {untyped_record, N}, St)
  			  end
  		  end, St0, RecNames -- TRecNames);
  	false ->
  	    St0
      end.
  
negative.code: 		[{FA,L} || {function,L,F,A,_} <- Forms,
  			   not lists:member(FA = {F,A}, Specs)];
  	    exported ->
  		Exps0 = gb_sets:to_list(St0#lint.exports) -- pseudolocals(),
                  Exps = Exps0 -- Specs,
  		[{FA,L} || {function,L,F,A,_} <- Forms,
  			   member(FA = {F,A}, Exps)]
  	end,
      foldl(fun ({FA,L}, St) ->
  		  add_warning(L, {missing_spec,FA}, St)
  