Fix static analyzer crash on code taking the address of a field. Fixes PR 11146.
llvm-svn: 153283
This commit is contained in:
parent
c4530bfe21
commit
30de950bba
|
@ -66,6 +66,7 @@ public:
|
|||
DISPATCH_CASE(Record) // FIXME: Refine. VisitStructDecl?
|
||||
DISPATCH_CASE(CXXRecord)
|
||||
DISPATCH_CASE(Enum)
|
||||
DISPATCH_CASE(Field)
|
||||
DISPATCH_CASE(UsingDirective)
|
||||
DISPATCH_CASE(Using)
|
||||
default:
|
||||
|
@ -82,6 +83,7 @@ public:
|
|||
DEFAULT_DISPATCH(Typedef)
|
||||
DEFAULT_DISPATCH(Record)
|
||||
DEFAULT_DISPATCH(Enum)
|
||||
DEFAULT_DISPATCH(Field)
|
||||
DEFAULT_DISPATCH(ObjCInterface)
|
||||
DEFAULT_DISPATCH(ObjCMethod)
|
||||
DEFAULT_DISPATCH(ObjCProtocol)
|
||||
|
|
|
@ -1384,6 +1384,13 @@ void ExprEngine::VisitCommonDeclRefExpr(const Expr *Ex, const NamedDecl *D,
|
|||
ProgramPoint::PostLValueKind);
|
||||
return;
|
||||
}
|
||||
if (isa<FieldDecl>(D)) {
|
||||
// FIXME: Compute lvalue of fields.
|
||||
Bldr.generateNode(Ex, Pred, state->BindExpr(Ex, LCtx, UnknownVal()),
|
||||
false, 0, ProgramPoint::PostLValueKind);
|
||||
return;
|
||||
}
|
||||
|
||||
assert (false &&
|
||||
"ValueDecl support for this ValueDecl not implemented.");
|
||||
}
|
||||
|
|
|
@ -552,3 +552,19 @@ void PR11545_positive() {
|
|||
}
|
||||
}
|
||||
|
||||
// Test handling taking the address of a field. While the analyzer
|
||||
// currently doesn't do anything intelligent here, this previously
|
||||
// resulted in a crash.
|
||||
class PR11146 {
|
||||
public:
|
||||
struct Entry;
|
||||
void baz();
|
||||
};
|
||||
|
||||
struct PR11146::Entry {
|
||||
int x;
|
||||
};
|
||||
|
||||
void PR11146::baz() {
|
||||
(void) &Entry::x;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue