see testcase, reduced example of a situation reported by Kyryl Melekhin in https://github.com/kyx0r/neatvi/ . Problem is that setting up the VLA sp-save in a scope that isn't entered at runtime leaves traces of it in outer scopes that then try to restore the stack pointer from uninitialized slots.
		
			
				
	
	
		
			40 lines
		
	
	
	
		
			750 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			750 B
		
	
	
	
		
			C
		
	
	
	
	
	
typedef __SIZE_TYPE__ size_t;
 | 
						|
extern int printf(const char*, ...);
 | 
						|
extern size_t strlen(const char*);
 | 
						|
char str[] = "blabla";
 | 
						|
int g;
 | 
						|
int main()
 | 
						|
{
 | 
						|
  //char helpme[strlen(str) + 1];
 | 
						|
  int i = 0;
 | 
						|
#if 0
 | 
						|
  if (g) {
 | 
						|
      char buf[strlen(str) + 10];
 | 
						|
      buf[0] = 0;
 | 
						|
  }
 | 
						|
alabel:
 | 
						|
  printf("default: i = %d\n", i);
 | 
						|
#else
 | 
						|
  for (i = 0; i < 5; i++) {
 | 
						|
      switch (i) {
 | 
						|
      case 10:
 | 
						|
          if (g) {
 | 
						|
              char buf[strlen(str) + 10];
 | 
						|
              buf[0] = 0;
 | 
						|
              goto do_cmd;
 | 
						|
          }
 | 
						|
          break;
 | 
						|
      case 1:
 | 
						|
          printf("reached 3\n");
 | 
						|
    do_cmd:
 | 
						|
          printf("after do_cmd");
 | 
						|
          break;
 | 
						|
      default:
 | 
						|
          g++;
 | 
						|
          printf("default: i = %d\n", i);
 | 
						|
          break;
 | 
						|
      }
 | 
						|
  }
 | 
						|
#endif
 | 
						|
  return 0;
 | 
						|
}
 |