diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Basic/Attr.td | 5 | ||||
-rw-r--r-- | clang/lib/Analysis/Consumed.cpp | 10 | ||||
-rw-r--r-- | clang/lib/Analysis/ThreadSafety.cpp | 31 | ||||
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 7 | ||||
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp | 5 | ||||
-rw-r--r-- | clang/utils/TableGen/ClangAttrEmitter.cpp | 73 |
6 files changed, 56 insertions, 75 deletions
diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 3be16d2aba5..958d03eb48f 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -830,9 +830,8 @@ def NonNull : InheritableAttr { let Args = [VariadicUnsignedArgument<"Args">]; let AdditionalMembers = [{bool isNonNull(unsigned idx) const { - for (args_iterator i = args_begin(), e = args_end(); - i != e; ++i) - if (*i == idx) + for (const auto &V : args()) + if (V == idx) return true; return false; } }]; diff --git a/clang/lib/Analysis/Consumed.cpp b/clang/lib/Analysis/Consumed.cpp index e0a9d512c81..6d590ab2e3d 100644 --- a/clang/lib/Analysis/Consumed.cpp +++ b/clang/lib/Analysis/Consumed.cpp @@ -113,14 +113,10 @@ static ConsumedState invertConsumedUnconsumed(ConsumedState State) { static bool isCallableInState(const CallableWhenAttr *CWAttr, ConsumedState State) { - CallableWhenAttr::callableStates_iterator I = CWAttr->callableStates_begin(), - E = CWAttr->callableStates_end(); - - for (; I != E; ++I) { - + for (const auto &S : CWAttr->callableStates()) { ConsumedState MappedAttrState = CS_None; - - switch (*I) { + + switch (S) { case CallableWhenAttr::Unknown: MappedAttrState = CS_Unknown; break; diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 94d8e7025c6..967379ab788 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -1478,12 +1478,12 @@ static const ValueDecl *getValueDecl(const Expr *Exp) { } template <typename Ty> -class has_arg_iterator { +class has_arg_iterator_range { typedef char yes[1]; typedef char no[2]; template <typename Inner> - static yes& test(Inner *I, decltype(I->args_begin()) * = nullptr); + static yes& test(Inner *I, decltype(I->args()) * = nullptr); template <typename> static no& test(...); @@ -1522,7 +1522,7 @@ static StringRef ClassifyDiagnostic(const ValueDecl *VD) { } template <typename AttrTy> -static typename std::enable_if<!has_arg_iterator<AttrTy>::value, +static typename std::enable_if<!has_arg_iterator_range<AttrTy>::value, StringRef>::type ClassifyDiagnostic(const AttrTy *A) { if (const ValueDecl *VD = getValueDecl(A->getArg())) @@ -1531,11 +1531,11 @@ ClassifyDiagnostic(const AttrTy *A) { } template <typename AttrTy> -static typename std::enable_if<has_arg_iterator<AttrTy>::value, +static typename std::enable_if<has_arg_iterator_range<AttrTy>::value, StringRef>::type ClassifyDiagnostic(const AttrTy *A) { - for (auto I = A->args_begin(), E = A->args_end(); I != E; ++I) { - if (const ValueDecl *VD = getValueDecl(*I)) + for (const auto *Arg : A->args()) { + if (const ValueDecl *VD = getValueDecl(Arg)) return ClassifyDiagnostic(VD); } return "mutex"; @@ -1624,10 +1624,10 @@ void ThreadSafetyAnalyzer::getMutexIDs(MutexIDList &Mtxs, AttrType *Attr, return; } - for (iterator_type I=Attr->args_begin(), E=Attr->args_end(); I != E; ++I) { - SExpr Mu(*I, Exp, D, SelfDecl); + for (const auto *Arg : Attr->args()) { + SExpr Mu(Arg, Exp, D, SelfDecl); if (!Mu.isValid()) - SExpr::warnInvalidLock(Handler, *I, Exp, D, ClassifyDiagnostic(Attr)); + SExpr::warnInvalidLock(Handler, Arg, Exp, D, ClassifyDiagnostic(Attr)); else Mtxs.push_back_nodup(Mu); } @@ -2058,21 +2058,16 @@ void BuildLockset::handleCall(Expr *Exp, const NamedDecl *D, VarDecl *VD) { case attr::RequiresCapability: { RequiresCapabilityAttr *A = cast<RequiresCapabilityAttr>(At); - - for (RequiresCapabilityAttr::args_iterator I = A->args_begin(), - E = A->args_end(); I != E; ++I) - warnIfMutexNotHeld(D, Exp, A->isShared() ? AK_Read : AK_Written, *I, + for (auto *Arg : A->args()) + warnIfMutexNotHeld(D, Exp, A->isShared() ? AK_Read : AK_Written, Arg, POK_FunctionCall, ClassifyDiagnostic(A)); break; } case attr::LocksExcluded: { LocksExcludedAttr *A = cast<LocksExcludedAttr>(At); - - for (LocksExcludedAttr::args_iterator I = A->args_begin(), - E = A->args_end(); I != E; ++I) { - warnIfMutexHeld(D, Exp, *I, ClassifyDiagnostic(A)); - } + for (auto *Arg : A->args()) + warnIfMutexHeld(D, Exp, Arg, ClassifyDiagnostic(A)); break; } diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 526f891f87e..1b44fe9822c 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -717,11 +717,8 @@ static void CheckNonNullArguments(Sema &S, SourceLocation CallSiteLoc) { // Check the attributes attached to the method/function itself. for (const auto *NonNull : FDecl->specific_attrs<NonNullAttr>()) { - for (NonNullAttr::args_iterator i = NonNull->args_begin(), - e = NonNull->args_end(); - i != e; ++i) { - CheckNonNullArgument(S, ExprArgs[*i], CallSiteLoc); - } + for (const auto &Val : NonNull->args()) + CheckNonNullArgument(S, ExprArgs[Val], CallSiteLoc); } // Check the attributes on the parameters. diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp index f0d1924df59..63c232ff9c4 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp @@ -921,9 +921,8 @@ ProgramStateRef MallocChecker::FreeMemAttr(CheckerContext &C, ProgramStateRef State = C.getState(); bool ReleasedAllocated = false; - for (OwnershipAttr::args_iterator I = Att->args_begin(), E = Att->args_end(); - I != E; ++I) { - ProgramStateRef StateI = FreeMemAux(C, CE, State, *I, + for (const auto &Arg : Att->args()) { + ProgramStateRef StateI = FreeMemAux(C, CE, State, Arg, Att->getOwnKind() == OwnershipAttr::Holds, ReleasedAllocated); if (StateI) diff --git a/clang/utils/TableGen/ClangAttrEmitter.cpp b/clang/utils/TableGen/ClangAttrEmitter.cpp index 8e06b513264..b4dc56a6dca 100644 --- a/clang/utils/TableGen/ClangAttrEmitter.cpp +++ b/clang/utils/TableGen/ClangAttrEmitter.cpp @@ -504,32 +504,33 @@ namespace { }; class VariadicArgument : public Argument { - std::string type; + std::string Type, ArgName, ArgSizeName, RangeName; public: VariadicArgument(Record &Arg, StringRef Attr, std::string T) - : Argument(Arg, Attr), type(T) - {} + : Argument(Arg, Attr), Type(T), ArgName(getLowerName().str() + "_"), + ArgSizeName(ArgName + "Size"), RangeName(getLowerName()) {} - std::string getType() const { return type; } + std::string getType() const { return Type; } void writeAccessors(raw_ostream &OS) const override { - OS << " typedef " << type << "* " << getLowerName() << "_iterator;\n"; - OS << " " << getLowerName() << "_iterator " << getLowerName() - << "_begin() const {\n"; - OS << " return " << getLowerName() << ";\n"; - OS << " }\n"; - OS << " " << getLowerName() << "_iterator " << getLowerName() - << "_end() const {\n"; - OS << " return " << getLowerName() << " + " << getLowerName() - << "Size;\n"; - OS << " }\n"; - OS << " unsigned " << getLowerName() << "_size() const {\n" - << " return " << getLowerName() << "Size;\n"; - OS << " }"; + std::string IteratorType = getLowerName().str() + "_iterator"; + std::string BeginFn = getLowerName().str() + "_begin()"; + std::string EndFn = getLowerName().str() + "_end()"; + + OS << " typedef " << Type << "* " << IteratorType << ";\n"; + OS << " " << IteratorType << " " << BeginFn << " const {" + << " return " << ArgName << "; }\n"; + OS << " " << IteratorType << " " << EndFn << " const {" + << " return " << ArgName << " + " << ArgSizeName << "; }\n"; + OS << " unsigned " << getLowerName() << "_size() const {" + << " return " << ArgSizeName << "; }\n"; + OS << " llvm::iterator_range<" << IteratorType << "> " << RangeName + << "() const { return llvm::make_range(" << BeginFn << ", " << EndFn + << "); }\n"; } void writeCloneArgs(raw_ostream &OS) const override { - OS << getLowerName() << ", " << getLowerName() << "Size"; + OS << ArgName << ", " << ArgSizeName; } void writeTemplateInstantiationArgs(raw_ostream &OS) const override { // This isn't elegant, but we have to go through public methods... @@ -538,15 +539,15 @@ namespace { } void writeCtorBody(raw_ostream &OS) const override { OS << " std::copy(" << getUpperName() << ", " << getUpperName() - << " + " << getLowerName() << "Size, " << getLowerName() << ");"; + << " + " << ArgSizeName << ", " << ArgName << ");"; } void writeCtorInitializers(raw_ostream &OS) const override { - OS << getLowerName() << "Size(" << getUpperName() << "Size), " - << getLowerName() << "(new (Ctx, 16) " << getType() << "[" - << getLowerName() << "Size])"; + OS << ArgSizeName << "(" << getUpperName() << "Size), " + << ArgName << "(new (Ctx, 16) " << getType() << "[" + << ArgSizeName << "])"; } void writeCtorDefaultInitializers(raw_ostream &OS) const override { - OS << getLowerName() << "Size(0), " << getLowerName() << "(0)"; + OS << ArgSizeName << "(0), " << ArgName << "(nullptr)"; } void writeCtorParameters(raw_ostream &OS) const override { OS << getType() << " *" << getUpperName() << ", unsigned " @@ -556,18 +557,18 @@ namespace { OS << getUpperName() << ", " << getUpperName() << "Size"; } void writeDeclarations(raw_ostream &OS) const override { - OS << " unsigned " << getLowerName() << "Size;\n"; - OS << " " << getType() << " *" << getLowerName() << ";"; + OS << " unsigned " << ArgSizeName << ";\n"; + OS << " " << getType() << " *" << ArgName << ";"; } void writePCHReadDecls(raw_ostream &OS) const override { OS << " unsigned " << getLowerName() << "Size = Record[Idx++];\n"; - OS << " SmallVector<" << type << ", 4> " << getLowerName() + OS << " SmallVector<" << Type << ", 4> " << getLowerName() << ";\n"; OS << " " << getLowerName() << ".reserve(" << getLowerName() << "Size);\n"; OS << " for (unsigned i = " << getLowerName() << "Size; i; --i)\n"; - std::string read = ReadPCHRecord(type); + std::string read = ReadPCHRecord(Type); OS << " " << getLowerName() << ".push_back(" << read << ");\n"; } void writePCHReadArgs(raw_ostream &OS) const override { @@ -575,28 +576,22 @@ namespace { } void writePCHWrite(raw_ostream &OS) const override { OS << " Record.push_back(SA->" << getLowerName() << "_size());\n"; - OS << " for (" << getAttrName() << "Attr::" << getLowerName() - << "_iterator i = SA->" << getLowerName() << "_begin(), e = SA->" - << getLowerName() << "_end(); i != e; ++i)\n"; - OS << " " << WritePCHRecord(type, "(*i)"); + OS << " for (auto &Val : SA->" << RangeName << "())\n"; + OS << " " << WritePCHRecord(Type, "Val"); } void writeValue(raw_ostream &OS) const override { OS << "\";\n"; OS << " bool isFirst = true;\n" - << " for (" << getAttrName() << "Attr::" << getLowerName() - << "_iterator i = " << getLowerName() << "_begin(), e = " - << getLowerName() << "_end(); i != e; ++i) {\n" + << " for (const auto &Val : " << RangeName << "()) {\n" << " if (isFirst) isFirst = false;\n" << " else OS << \", \";\n" - << " OS << *i;\n" + << " OS << Val;\n" << " }\n"; OS << " OS << \""; } void writeDump(raw_ostream &OS) const override { - OS << " for (" << getAttrName() << "Attr::" << getLowerName() - << "_iterator I = SA->" << getLowerName() << "_begin(), E = SA->" - << getLowerName() << "_end(); I != E; ++I)\n"; - OS << " OS << \" \" << *I;\n"; + OS << " for (const auto &Val : SA->" << RangeName << "())\n"; + OS << " OS << \" \" << Val;\n"; } }; |