What is C in practice?
It remains unclear what behaviour compilers currently provide (or should provide) for this.It might be nice if future surveys explicitly asked a followup question "Regardless of the standard or behavior of existing compilers, is there one of these answers that is the 'obviously correct' manner in which compilers should behave?  Which one?"If practically all users believe that the same answer is 'obviously correct', compiler writes might want to take this into account when deciding which behavior to implement.  For MSVC, one respondent said:

  "I am aware of a significant divergence between the LLVM 
  community and MSVC here; in general LLVM uses "undefined 
  behaviour" to mean "we can miscompile the program and get 
  better benchmarks", whereas MSVC regards "undefined 
  behaviour" as "we might have a security vulnerability so 
  this is a compile error / build break". First, there is 
  reading an uninitialized variable (i.e. something which 
  does not necessarily have a memory location); that should 
  always be a compile error. Period. Second, there is reading 
  a partially initialised struct (i.e. reading some memory 
  whose contents are only partly defined). That should give a 
  compile error/warning or static analysis warning if 
  detectable. If not detectable it should give the actual 
  contents of the memory (be stable). I am strongly with the 
  MSVC folks on this one - if the compiler can tell at 
  compile time that anything is undefined then it should 
  error out. Security problems are a real problem for the 
  whole industry and should not be included deliberately by 
  compilers."

I'm much less familiar with MSVC than the alternatives, but this is a refreshing approach. Yes, give me a mode that refuses to silently rewrite undefined behavior.  Is MSVC possibly able to take this approach because it isn't trying to be compliant to modern C standards?   Does it actually reduce the ability to apply useful optimizations?  Or just a difference in philosophy?