Remove the static maps from CheckDecorationsCompatibility (#2327)
Remove the static maps from CheckDecorationsCompatibility (#2327)

* Remove the static maps from CheckDecorationsCompatibility

There are a few data structures in the function
`CheckDecorationsCompatibility` that are allocated using `new` and their
address is stored in a static pointer.  This code pattern causes the
MSVC memory leak checker to say there is a memory leak.  Some people
are interested in keeping that clean.

To work around it, I have replaced them with either a function or an
array of POD types.  The array can be kept as a static directly because
it has a trivial destructor, and we don't have to worry about it being
destroyed too early.

Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/2317.

pierremoreau/SPIRV-Tools,dneto0/SPIRV-Tools,dneto0/SPIRV-Tools,KhronosGroup/SPIRV-Tools,pierremoreau/SPIRV-Tools,dneto0/SPIRV-Tools,antiagainst/SPIRV-Tools,KhronosGroup/SPIRV-Tools,KhronosGroup/SPIRV-Tools,KhronosGroup/SPIRV-Tools,KhronosGroup/SPIRV-Tools,KhronosGroup/SPIRV-Tools,antiagainst/SPIRV-Tools,KhronosGroup/SPIRV-Tools,pierremoreau/SPIRV-Tools,dneto0/SPIRV-Tools,dneto0/SPIRV-Tools,pierremoreau/SPIRV-Tools,pierremoreau/SPIRV-Tools,dneto0/SPIRV-Tools,pierremoreau/SPIRV-Tools,dneto0/SPIRV-Tools,KhronosGroup/SPIRV-Tools,pierremoreau/SPIRV-Tools,dneto0/SPIRV-Tools,antiagainst/SPIRV-Tools,antiagainst/SPIRV-Tools,pierremoreau/SPIRV-Tools,antiagainst/SPIRV-Tools