Incomplete X86MachineFunctionInfo type

In lib/Target/X86/X86COFFMachineModuleInfo.h we have:

   class X86MachineFunctionInfo;
   ...

   class X86COFFMachineModuleInfo : public MachineModuleInfoImpl {
     ...
     typedef std::map<const Function*, X86MachineFunctionInfo> FMFInfoMap;
     FMFInfoMap FunctionInfoMap;
     ...
   };

At this point in the translation unit X86MachineFunctionInfo is an incomplete type, yet it is being used to instantiate std::map. This is undefined behavior in C++03 (and C++0X) according to:

    17.4.3.6 - Other functions [lib.res.on.functions], p2, b5

Unfortunately I am not familiar enough with this code to recommend a fix. However I do know that this will create portability problems with llvm. X86MachineFunctionInfo must not be incomplete at the point it is used to instantiate std::map.

-Howard