This patch makes tcc ignore them. Normally (as per the C standard), They should be only applicable inside parameter arrays and affect (const/restrict) the pointer the array gets converted to. [matz: fix formatting, add volatile handling, add testcase, add comment about above deficiency]
		
			
				
	
	
		
			34 lines
		
	
	
	
		
			637 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			637 B
		
	
	
	
		
			C
		
	
	
	
	
	
void foo(int [5]);
 | 
						|
void fooc(int x[const 5]);
 | 
						|
void foos(int x[static 5]);
 | 
						|
void foov(int x[volatile 5]);
 | 
						|
void foor(int x[restrict 5]);
 | 
						|
void fooc(int [const 5]);
 | 
						|
void foos(int [static 5]);
 | 
						|
void foov(int [volatile 5]);
 | 
						|
void foor(int [restrict 5]);
 | 
						|
void fooc(int (* const x));
 | 
						|
void foos(int *x);
 | 
						|
void foov(int * volatile x);
 | 
						|
void foor(int * restrict x);
 | 
						|
void fooc(int x[volatile 5])
 | 
						|
{
 | 
						|
  x[3] = 42;
 | 
						|
#ifdef INVALID
 | 
						|
  x = 0;
 | 
						|
#endif
 | 
						|
}
 | 
						|
void foovm(int x[const *]);
 | 
						|
void foovm(int * const x);
 | 
						|
#ifdef INVALID
 | 
						|
void wrongc(int x[3][const 4]);
 | 
						|
void wrongvm(int x[static *]);
 | 
						|
void foovm(int x[const *])
 | 
						|
{
 | 
						|
  x[2] = 1;
 | 
						|
}
 | 
						|
#endif
 | 
						|
int main()
 | 
						|
{
 | 
						|
  return 0;
 | 
						|
}
 |