aboutsummaryrefslogtreecommitdiff
path: root/lib/Checker/LLVMConventionsChecker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Checker/LLVMConventionsChecker.cpp')
-rw-r--r--lib/Checker/LLVMConventionsChecker.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/Checker/LLVMConventionsChecker.cpp b/lib/Checker/LLVMConventionsChecker.cpp
index 7cd98b0319..17a17a8bbf 100644
--- a/lib/Checker/LLVMConventionsChecker.cpp
+++ b/lib/Checker/LLVMConventionsChecker.cpp
@@ -42,7 +42,7 @@ static bool IsStdString(QualType T) {
if (!TT)
return false;
- const TypedefDecl *TD = TT->getDecl();
+ const TypedefDecl *TD = TT->getDecl();
const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(TD->getDeclContext());
if (!ND)
return false;
@@ -94,7 +94,7 @@ void StringRefCheckerVisitor::VisitDeclStmt(DeclStmt *S) {
void StringRefCheckerVisitor::VisitVarDecl(VarDecl *VD) {
Expr *Init = VD->getInit();
if (!Init)
- return;
+ return;
// Pattern match for:
// llvm::StringRef x = call() (where call returns std::string)
@@ -129,6 +129,22 @@ void StringRefCheckerVisitor::VisitVarDecl(VarDecl *VD) {
// Entry point for all checks.
//===----------------------------------------------------------------------===//
-void clang::CheckLLVMConventions(const Decl *D, BugReporter &BR) {
- CheckStringRefAssignedTemporary(D, BR);
+static void ScanCodeDecls(DeclContext *DC, BugReporter &BR) {
+ for (DeclContext::decl_iterator I=DC->decls_begin(), E=DC->decls_end();
+ I!=E ; ++I) {
+
+ Decl *D = *I;
+ if (D->getBody()) {
+ CheckStringRefAssignedTemporary(D, BR);
+ }
+
+ if (DeclContext *DC_child = dyn_cast<DeclContext>(D))
+ ScanCodeDecls(DC_child, BR);
+ }
}
+
+void clang::CheckLLVMConventions(TranslationUnitDecl &TU,
+ BugReporter &BR) {
+ ScanCodeDecls(&TU, BR);
+}
+