summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-05-07 21:49:45 +0000
committerTed Kremenek <kremenek@apple.com>2009-05-07 21:49:45 +0000
commitba53fe98e7903eaef82869390c78caf5d965da5d (patch)
tree0d717635607abac5e825f3032b94109d91fe7d95 /clang/lib
parent0d451813f90b55b87a5736b80963ffc9685b7514 (diff)
downloadbcm5719-llvm-ba53fe98e7903eaef82869390c78caf5d965da5d.tar.gz
bcm5719-llvm-ba53fe98e7903eaef82869390c78caf5d965da5d.zip
More attribute renaming:
- Rename 'ns_returns_owned' -> 'ns_returns_retained'. - Rename 'cf_returns_owned' -> 'cf_returns_retained'. llvm-svn: 71182
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Analysis/GRExprEngineInternalChecks.cpp70
-rw-r--r--clang/lib/Parse/AttributeList.cpp8
-rw-r--r--clang/lib/Sema/SemaDeclAttr.cpp16
3 files changed, 79 insertions, 15 deletions
diff --git a/clang/lib/Analysis/GRExprEngineInternalChecks.cpp b/clang/lib/Analysis/GRExprEngineInternalChecks.cpp
index 541282da3e5..cca1c68cf7f 100644
--- a/clang/lib/Analysis/GRExprEngineInternalChecks.cpp
+++ b/clang/lib/Analysis/GRExprEngineInternalChecks.cpp
@@ -525,6 +525,65 @@ public:
//===----------------------------------------------------------------------===//
namespace {
+#if 0
+class VISIBILITY_HIDDEN TrackValueBRVisitor : public BugReporterVisitor {
+ SVal V;
+ Stmt *S;
+ const MemRegion *R;
+public:
+ TrackValueBRVisitor(SVal v, Stmt *s) : V(v), S(s), R(0) {}
+
+ PathDiagnosticPiece* VisitNode(const ExplodedNode<GRState> *N,
+ const ExplodedNode<GRState> *PrevN,
+ BugReporterContext& BRC) {
+
+ // Not at a expression?
+ if (!isa<PostStmt>(N->getLocation())) {
+ S = 0;
+ return NULL;
+ }
+
+ if (S)
+ return VisitNodeExpr(N, PrevN, BRC);
+ else if (R)
+ return VisitNodeRegion(N, PrevN, BRC);
+
+ return NULL;
+ }
+
+ PathDiagnosticPiece* VisitNodeExpr(const ExplodedNode<GRState> *N,
+ const ExplodedNode<GRState> *PrevN,
+ BugReporterContext& BRC) {
+
+ assert(S);
+ PostStmt P = cast<PostStmt>(N->getLocation());
+ Stmt *X = P.getStmt();
+
+ // Generate the subexpression path.
+ llvm::SmallVector<Stmt*, 4> SubExprPath;
+ ParentMap &PM = BRC.getParentMap();
+
+ for ( ; X && X != S ; X = X.getParent(X)) {
+ if (isa<ParenExpr>(X))
+ continue;
+
+ SubExprPath.push_back(L);
+ }
+
+ // Lost track? (X is not a subexpression of S).
+ if (X != S) {
+ S = NULL;
+ return NULL;
+ }
+
+ // Now go down the subexpression path!
+
+
+
+ }
+};
+#endif
+
class VISIBILITY_HIDDEN TrackConstraintBRVisitor : public BugReporterVisitor {
SVal Constraint;
const bool Assumption;
@@ -533,8 +592,8 @@ public:
TrackConstraintBRVisitor(SVal constraint, bool assumption)
: Constraint(constraint), Assumption(assumption), isSatisfied(false) {}
- PathDiagnosticPiece* VisitNode(const ExplodedNode<GRState>* N,
- const ExplodedNode<GRState>* PrevN,
+ PathDiagnosticPiece* VisitNode(const ExplodedNode<GRState> *N,
+ const ExplodedNode<GRState> *PrevN,
BugReporterContext& BRC) {
if (isSatisfied)
return NULL;
@@ -624,7 +683,7 @@ static void registerTrackNullValue(BugReporterContext& BRC,
// base value that was dereferenced.
// assert(!V.isUnknownOrUndef());
- // For now just track when a symbolic value became null.
+ // Is it a symbolic value?
if (loc::MemRegionVal *L = dyn_cast<loc::MemRegionVal>(&V)) {
const SubRegion *R = cast<SubRegion>(L->getRegion());
while (R && !isa<SymbolicRegion>(R)) {
@@ -634,8 +693,13 @@ static void registerTrackNullValue(BugReporterContext& BRC,
if (R) {
assert(isa<SymbolicRegion>(R));
registerTrackConstraint(BRC, loc::MemRegionVal(R), false);
+// registerTrackValue(BRC, S, V, N);
}
}
+
+ // Was it a hard integer?
+// if (isa<nonloc::ConcreteInt>(V))
+// registerTrackValue(BRC, S, V, N);
}
//===----------------------------------------------------------------------===//
diff --git a/clang/lib/Parse/AttributeList.cpp b/clang/lib/Parse/AttributeList.cpp
index 6dceda6432e..8e3e63ada49 100644
--- a/clang/lib/Parse/AttributeList.cpp
+++ b/clang/lib/Parse/AttributeList.cpp
@@ -131,10 +131,6 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo *Name) {
if (!memcmp(Str, "ext_vector_type", 15)) return AT_ext_vector_type;
if (!memcmp(Str, "ns_autoreleases", 15)) return AT_ns_autoreleases;
break;
- case 16:
- if (!memcmp(Str, "ns_returns_owned", 16)) return AT_ns_returns_owned;
- if (!memcmp(Str, "cf_returns_owned", 16)) return AT_cf_returns_owned;
- break;
case 17:
if (!memcmp(Str, "transparent_union", 17)) return AT_transparent_union;
if (!memcmp(Str, "analyzer_noreturn", 17)) return AT_analyzer_noreturn;
@@ -142,6 +138,10 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo *Name) {
case 18:
if (!memcmp(Str, "warn_unused_result", 18)) return AT_warn_unused_result;
break;
+ case 19:
+ if (!memcmp(Str, "ns_returns_retained", 19)) return AT_ns_returns_retained;
+ if (!memcmp(Str, "cf_returns_retained", 19)) return AT_cf_returns_retained;
+ break;
case 22:
if (!memcmp(Str, "no_instrument_function", 22))
return AT_no_instrument_function;
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 7701835b38b..898dae9a209 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -1557,10 +1557,10 @@ static void HandleNSOwnershipReturnsAttr(Decl *d, const AttributeList &Attr,
default:
assert(0 && "invalid ownership attribute");
return;
- case AttributeList::AT_cf_returns_owned:
- name = "cf_returns_owned"; break;
- case AttributeList::AT_ns_returns_owned:
- name = "ns_returns_owned"; break;
+ case AttributeList::AT_cf_returns_retained:
+ name = "cf_returns_retained"; break;
+ case AttributeList::AT_ns_returns_retained:
+ name = "ns_returns_retained"; break;
};
S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) <<
@@ -1572,10 +1572,10 @@ static void HandleNSOwnershipReturnsAttr(Decl *d, const AttributeList &Attr,
default:
assert(0 && "invalid ownership attribute");
return;
- case AttributeList::AT_cf_returns_owned:
+ case AttributeList::AT_cf_returns_retained:
d->addAttr(::new (S.Context) CFOwnershipReturnsAttr());
return;
- case AttributeList::AT_ns_returns_owned:
+ case AttributeList::AT_ns_returns_retained:
d->addAttr(::new (S.Context) NSOwnershipReturnsAttr());
return;
};
@@ -1676,8 +1676,8 @@ static void ProcessDeclAttribute(Decl *D, const AttributeList &Attr, Sema &S) {
case AttributeList::AT_ns_releases:
case AttributeList::AT_ns_retains:
HandleNSOwnershipAttr(D, Attr, S, true); break;
- case AttributeList::AT_ns_returns_owned:
- case AttributeList::AT_cf_returns_owned:
+ case AttributeList::AT_ns_returns_retained:
+ case AttributeList::AT_cf_returns_retained:
HandleNSOwnershipReturnsAttr(D, Attr, S); break;
case AttributeList::AT_packed: HandlePackedAttr (D, Attr, S); break;
OpenPOWER on IntegriCloud