forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Mathematica
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Mathematica
		
	
	
	
// RUN: %clang_cc1 -analyze -analyzer-checker=core,core.experimental -analyzer-store=basic -verify -fblocks %s
 | 
						|
 | 
						|
//---------------------------------------------------------------------------
 | 
						|
// Test case 'checkaccess_union' differs for region store and basic store.
 | 
						|
// The basic store doesn't reason about compound literals, so the code
 | 
						|
// below won't fire an "uninitialized value" warning.
 | 
						|
//---------------------------------------------------------------------------
 | 
						|
 | 
						|
// PR 2948 (testcase; crash on VisitLValue for union types)
 | 
						|
// http://llvm.org/bugs/show_bug.cgi?id=2948
 | 
						|
 | 
						|
void checkaccess_union() {
 | 
						|
  int ret = 0, status;
 | 
						|
  if (((((__extension__ (((union {  // no-warning
 | 
						|
    __typeof (status) __in; int __i;}
 | 
						|
    )
 | 
						|
    {
 | 
						|
      .__in = (status)}
 | 
						|
      ).__i))) & 0xff00) >> 8) == 1)
 | 
						|
        ret = 1;
 | 
						|
}
 | 
						|
 | 
						|
// BasicStore handles this case incorrectly because it doesn't reason about
 | 
						|
// the value pointed to by 'x' and thus creates different symbolic values
 | 
						|
// at the declarations of 'a' and 'b' respectively.  See the companion test
 | 
						|
// in 'misc-ps-region-store.m'.
 | 
						|
void test_trivial_symbolic_comparison_pointer_parameter(int *x) {
 | 
						|
  int a = *x;
 | 
						|
  int b = *x;
 | 
						|
  if (a != b) {
 | 
						|
    int *p = 0;
 | 
						|
    *p = 0xDEADBEEF;     // expected-warning{{null}}
 | 
						|
  }
 | 
						|
}
 | 
						|
 |