From 748c139adebf58b144bf4ecc2a2333d9ad66ecdc Mon Sep 17 00:00:00 2001 From: Kristof Umann Date: Fri, 8 Mar 2019 16:00:42 +0000 Subject: [analyzer] Emit an error rather than assert on invalid checker option input Asserting on invalid input isn't very nice, hence the patch to emit an error instead. This is the first of many patches to overhaul the way we handle checker options. Differential Revision: https://reviews.llvm.org/D57850 llvm-svn: 355704 --- clang/test/Analysis/copypaste/suspicious-clones.cpp | 5 ++++- .../cxx-uninitialized-object-unionlike-constructs.cpp | 14 ++++++++++++++ clang/test/Analysis/outofbound.c | 2 +- clang/test/Analysis/padding_c.c | 14 +++++++++++++- clang/test/Analysis/undef-buffers.c | 2 +- clang/test/Analysis/use-after-move.cpp | 11 +++++++++++ 6 files changed, 44 insertions(+), 4 deletions(-) (limited to 'clang/test') diff --git a/clang/test/Analysis/copypaste/suspicious-clones.cpp b/clang/test/Analysis/copypaste/suspicious-clones.cpp index ae29b0e16d1..61eb45a37a0 100644 --- a/clang/test/Analysis/copypaste/suspicious-clones.cpp +++ b/clang/test/Analysis/copypaste/suspicious-clones.cpp @@ -1,4 +1,7 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:ReportSuspiciousClones=true -analyzer-config alpha.clone.CloneChecker:ReportNormalClones=false -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s +// RUN: %clang_analyze_cc1 -verify %s \ +// RUN: -analyzer-checker=alpha.clone.CloneChecker \ +// RUN: -analyzer-config alpha.clone.CloneChecker:ReportNormalClones=false \ +// RUN: -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 // Tests finding a suspicious clone that references local variables. diff --git a/clang/test/Analysis/cxx-uninitialized-object-unionlike-constructs.cpp b/clang/test/Analysis/cxx-uninitialized-object-unionlike-constructs.cpp index dc52afd9019..069f960b16d 100644 --- a/clang/test/Analysis/cxx-uninitialized-object-unionlike-constructs.cpp +++ b/clang/test/Analysis/cxx-uninitialized-object-unionlike-constructs.cpp @@ -3,6 +3,20 @@ // RUN: -analyzer-config alpha.cplusplus.UninitializedObject:IgnoreRecordsWithField="[Tt]ag|[Kk]ind" \ // RUN: -std=c++11 -verify %s +// RUN: not %clang_analyze_cc1 -verify %s \ +// RUN: -analyzer-checker=core \ +// RUN: -analyzer-checker=alpha.cplusplus.UninitializedObject \ +// RUN: -analyzer-config \ +// RUN: alpha.cplusplus.UninitializedObject:IgnoreRecordsWithField="([)]" \ +// RUN: 2>&1 | FileCheck %s -check-prefix=CHECK-UNINIT-INVALID-REGEX + +// CHECK-UNINIT-INVALID-REGEX: (frontend): invalid input for checker option +// CHECK-UNINIT-INVALID-REGEX-SAME: 'alpha.cplusplus.UninitializedObject:IgnoreRecordsWithField', +// CHECK-UNINIT-INVALID-REGEX-SAME: that expects a valid regex, building failed +// CHECK-UNINIT-INVALID-REGEX-SAME: with error message "parentheses not +// CHECK-UNINIT-INVALID-REGEX-SAME: balanced" + + // expected-no-diagnostics // Both type and name contains "kind". diff --git a/clang/test/Analysis/outofbound.c b/clang/test/Analysis/outofbound.c index c4af1fbb901..60190b4bc35 100644 --- a/clang/test/Analysis/outofbound.c +++ b/clang/test/Analysis/outofbound.c @@ -2,7 +2,7 @@ // RUN: -analyzer-checker=core \ // RUN: -analyzer-checker=unix \ // RUN: -analyzer-checker=alpha.security.ArrayBound \ -// RUN: -analyzer-config unix:Optimistic=true +// RUN: -analyzer-config unix.DynamicMemoryModeling:Optimistic=true typedef __typeof(sizeof(int)) size_t; void *malloc(size_t); diff --git a/clang/test/Analysis/padding_c.c b/clang/test/Analysis/padding_c.c index f4178f54579..9e216a923e7 100644 --- a/clang/test/Analysis/padding_c.c +++ b/clang/test/Analysis/padding_c.c @@ -1,4 +1,16 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=optin.performance -analyzer-config optin.performance.Padding:AllowedPad=2 -verify %s +// RUN: %clang_analyze_cc1 -verify %s \ +// RUN: -analyzer-checker=optin.performance \ +// RUN: -analyzer-config optin.performance.Padding:AllowedPad=2 + +// RUN: not %clang_analyze_cc1 -verify %s \ +// RUN: -analyzer-checker=core \ +// RUN: -analyzer-checker=optin.performance.Padding \ +// RUN: -analyzer-config optin.performance.Padding:AllowedPad=-10 \ +// RUN: 2>&1 | FileCheck %s -check-prefix=CHECK-PAD-NEGATIVE-VALUE + +// CHECK-PAD-NEGATIVE-VALUE: (frontend): invalid input for checker option +// CHECK-PAD-NEGATIVE-VALUE-SAME: 'optin.performance.Padding:AllowedPad', that +// CHECK-PAD-NEGATIVE-VALUE-SAME: expects a non-negative value #if __has_include() #include diff --git a/clang/test/Analysis/undef-buffers.c b/clang/test/Analysis/undef-buffers.c index 10a46c64f69..70db8eb6e55 100644 --- a/clang/test/Analysis/undef-buffers.c +++ b/clang/test/Analysis/undef-buffers.c @@ -2,7 +2,7 @@ // RUN: -analyzer-checker=core \ // RUN: -analyzer-checker=unix \ // RUN: -analyzer-checker=core.uninitialized \ -// RUN: -analyzer-config unix:Optimistic=true +// RUN: -analyzer-config unix.DynamicMemoryModeling:Optimistic=true typedef __typeof(sizeof(int)) size_t; void *malloc(size_t); diff --git a/clang/test/Analysis/use-after-move.cpp b/clang/test/Analysis/use-after-move.cpp index 435976c5a7c..837f4c732e9 100644 --- a/clang/test/Analysis/use-after-move.cpp +++ b/clang/test/Analysis/use-after-move.cpp @@ -27,6 +27,17 @@ // RUN: -analyzer-config cplusplus.Move:WarnOn=All -DAGGRESSIVE\ // RUN: -analyzer-checker debug.ExprInspection +// RUN: not %clang_analyze_cc1 -verify %s \ +// RUN: -analyzer-checker=core \ +// RUN: -analyzer-checker=cplusplus.Move \ +// RUN: -analyzer-config cplusplus.Move:WarnOn="a bunch of things" \ +// RUN: 2>&1 | FileCheck %s -check-prefix=CHECK-MOVE-INVALID-VALUE + +// CHECK-MOVE-INVALID-VALUE: (frontend): invalid input for checker option +// CHECK-MOVE-INVALID-VALUE-SAME: 'cplusplus.Move:WarnOn', that expects either +// CHECK-MOVE-INVALID-VALUE-SAME: "KnownsOnly", "KnownsAndLocals" or "All" +// CHECK-MOVE-INVALID-VALUE-SAME: string value + #include "Inputs/system-header-simulator-cxx.h" void clang_analyzer_warnIfReached(); -- cgit v1.2.3