Microsoft C++ with the /Gy option will place every function in a different section so that the linker can omit unused functions, which may reduce the executable size.
In addition to placing every function in a different section, it also marks each section COMDAT with Selection IMAGE_COMDAT_SELECT_NODUPLICATES. The purpose of COMDAT is to allow something to be defined in more than one place (the linker picks one definition and discards the others), but that Selection value disallows multiple definitions, which would seem to simply undo the effect.
What exactly is the purpose of IMAGE_COMDAT_SELECT_NODUPLICATES? Or why does Microsoft C++ with /Gy mark code sections COMDAT?