forked from OSchip/llvm-project
				
			Handle symbolicating a reference in an initializer expression that we don't understand.
llvm-svn: 154084
This commit is contained in:
		
							parent
							
								
									00fa5968cb
								
							
						
					
					
						commit
						34ac1cf3cd
					
				| 
						 | 
				
			
			@ -375,7 +375,12 @@ void ExprEngine::VisitDeclStmt(const DeclStmt *DS, ExplodedNode *Pred,
 | 
			
		|||
      // Recover some path-sensitivity if a scalar value evaluated to
 | 
			
		||||
      // UnknownVal.
 | 
			
		||||
      if (InitVal.isUnknown()) {
 | 
			
		||||
        InitVal = svalBuilder.getConjuredSymbolVal(NULL, InitEx, LC,
 | 
			
		||||
	QualType Ty = InitEx->getType();
 | 
			
		||||
	if (InitEx->isLValue()) {
 | 
			
		||||
	  Ty = getContext().getPointerType(Ty);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
        InitVal = svalBuilder.getConjuredSymbolVal(NULL, InitEx, LC, Ty,
 | 
			
		||||
                                 currentBuilderContext->getCurrentBlockCount());
 | 
			
		||||
      }
 | 
			
		||||
      B.takeNodes(N);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -568,3 +568,13 @@ struct PR11146::Entry {
 | 
			
		|||
void PR11146::baz() {
 | 
			
		||||
  (void) &Entry::x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Test symbolicating a reference.  In this example, the
 | 
			
		||||
// analyzer (originally) didn't know how to handle x[index - index2],
 | 
			
		||||
// returning an UnknownVal.  The conjured symbol wasn't a location,
 | 
			
		||||
// and would result in a crash.
 | 
			
		||||
void rdar10924675(unsigned short x[], int index, int index2) {
 | 
			
		||||
  unsigned short &y = x[index - index2];
 | 
			
		||||
  if (y == 0)
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue