From: Kirstóf Umann Date: Tue, 14 Apr 2020 15:13:41 +0000 (+0200) Subject: [analyzer][DirectIvarAssignment] Turn DirectIvarAssignmentForAnnotatedFunctions into... X-Git-Tag: llvmorg-12-init~5690 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=500479dba33ae03644313e34d10c013371b5215b;p=platform%2Fupstream%2Fllvm.git [analyzer][DirectIvarAssignment] Turn DirectIvarAssignmentForAnnotatedFunctions into a checker option Since this is an alpha checker, I don't worry about backward compatibility :) Differential Revision: https://reviews.llvm.org/D78121 --- diff --git a/clang/include/clang/StaticAnalyzer/Checkers/Checkers.td b/clang/include/clang/StaticAnalyzer/Checkers/Checkers.td index 5cf32ac..cc6952b 100644 --- a/clang/include/clang/StaticAnalyzer/Checkers/Checkers.td +++ b/clang/include/clang/StaticAnalyzer/Checkers/Checkers.td @@ -1118,13 +1118,15 @@ def MissingInvalidationMethod : Checker<"MissingInvalidationMethod">, def DirectIvarAssignment : Checker<"DirectIvarAssignment">, HelpText<"Check for direct assignments to instance variables">, - Documentation; - -def DirectIvarAssignmentForAnnotatedFunctions : - Checker<"DirectIvarAssignmentForAnnotatedFunctions">, - HelpText<"Check for direct assignments to instance variables in the methods " - "annotated with objc_no_direct_instance_variable_assignment">, - Dependencies<[DirectIvarAssignment]>, + CheckerOptions<[ + CmdLineOption + ]>, Documentation; } // end "alpha.osx.cocoa" diff --git a/clang/lib/StaticAnalyzer/Checkers/DirectIvarAssignment.cpp b/clang/lib/StaticAnalyzer/Checkers/DirectIvarAssignment.cpp index d09f0da..df88b71 100644 --- a/clang/lib/StaticAnalyzer/Checkers/DirectIvarAssignment.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/DirectIvarAssignment.cpp @@ -219,19 +219,12 @@ static bool AttrFilter(const ObjCMethodDecl *M) { // Register the checker that checks for direct accesses in all functions, // except for the initialization and copy routines. void ento::registerDirectIvarAssignment(CheckerManager &mgr) { - mgr.registerChecker(); + auto Chk = mgr.registerChecker(); + if (mgr.getAnalyzerOptions().getCheckerBooleanOption(Chk, + "AnnotatedFunctions")) + Chk->ShouldSkipMethod = &AttrFilter; } bool ento::shouldRegisterDirectIvarAssignment(const CheckerManager &mgr) { return true; } - -void ento::registerDirectIvarAssignmentForAnnotatedFunctions( - CheckerManager &mgr) { - mgr.getChecker()->ShouldSkipMethod = &AttrFilter; -} - -bool ento::shouldRegisterDirectIvarAssignmentForAnnotatedFunctions( - const CheckerManager &mgr) { - return true; -} diff --git a/clang/test/Analysis/analyzer-config.c b/clang/test/Analysis/analyzer-config.c index b94f618..3a6b4d2 100644 --- a/clang/test/Analysis/analyzer-config.c +++ b/clang/test/Analysis/analyzer-config.c @@ -8,6 +8,7 @@ // CHECK-NEXT: alpha.clone.CloneChecker:MinimumCloneComplexity = 50 // CHECK-NEXT: alpha.clone.CloneChecker:ReportNormalClones = true // CHECK-NEXT: alpha.cplusplus.STLAlgorithmModeling:AggressiveStdFindModeling = false +// CHECK-NEXT: alpha.osx.cocoa.DirectIvarAssignment:AnnotatedFunctions = false // CHECK-NEXT: alpha.security.MmapWriteExec:MmapProtExec = 0x04 // CHECK-NEXT: alpha.security.MmapWriteExec:MmapProtRead = 0x01 // CHECK-NEXT: alpha.security.taint.TaintPropagation:Config = "" diff --git a/clang/test/Analysis/objc/direct-ivar-assignment-in-annotated-functions.m b/clang/test/Analysis/objc/direct-ivar-assignment-in-annotated-functions.m index 782fcec..4d3ee07 100644 --- a/clang/test/Analysis/objc/direct-ivar-assignment-in-annotated-functions.m +++ b/clang/test/Analysis/objc/direct-ivar-assignment-in-annotated-functions.m @@ -1,4 +1,8 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.osx.cocoa.DirectIvarAssignmentForAnnotatedFunctions -verify -fblocks %s +// RUN: %clang_analyze_cc1 -verify -fblocks %s \ +// RUN: -analyzer-checker=core \ +// RUN: -analyzer-checker=alpha.osx.cocoa.DirectIvarAssignment \ +// RUN: -analyzer-config \ +// RUN: alpha.osx.cocoa.DirectIvarAssignment:AnnotatedFunctions=true typedef signed char BOOL; @protocol NSObject - (BOOL)isEqual:(id)object; @end @@ -60,4 +64,4 @@ typedef signed char BOOL; _nonSynth = 0; // no-warning } -@end \ No newline at end of file + @end