https://github.com/benedekaibas updated https://github.com/llvm/llvm-project/pull/228777
>From c7121f0eb13a1d5350a0a00c62688c79fd5740e1 Mon Sep 17 00:00:00 2001 From: benedekaibas <[email protected]> Date: Sat, 3 Oct 2026 23:27:55 +0200 Subject: [PATCH 1/2] [analyzer] Fix double space in generateMinimalDiagForBlockEdge emitted notes --- clang/lib/StaticAnalyzer/Core/BugReporter.cpp | 4 ++-- clang/test/Analysis/dangling-ptr-deref.cpp | 2 +- .../diagnostics/track_subexpressions.cpp | 4 ++-- clang/test/Analysis/loop-widening-notes.cpp | 8 +++---- clang/test/Analysis/loop-widening.cpp | 4 ++-- clang/test/Analysis/return-ptr-range.cpp | 4 ++-- .../track-control-dependency-conditions.cpp | 6 ++--- clang/test/Analysis/use-after-move.cpp | 24 +++++++++---------- 8 files changed, 28 insertions(+), 28 deletions(-) diff --git a/clang/lib/StaticAnalyzer/Core/BugReporter.cpp b/clang/lib/StaticAnalyzer/Core/BugReporter.cpp index 25d10df604bda1..595f6b0090b41d 100644 --- a/clang/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/clang/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -972,7 +972,7 @@ void PathDiagnosticBuilder::generateMinimalDiagForBlockEdge( C.getActivePath().push_front( std::make_shared<PathDiagnosticControlFlowPiece>( - Start, End, "Loop condition is false. Exiting loop")); + Start, End, "Loop condition is false. Exiting loop")); } break; @@ -996,7 +996,7 @@ void PathDiagnosticBuilder::generateMinimalDiagForBlockEdge( C.getActivePath().push_front( std::make_shared<PathDiagnosticControlFlowPiece>( - Start, End, "Loop condition is true. Entering loop body")); + Start, End, "Loop condition is true. Entering loop body")); } break; diff --git a/clang/test/Analysis/dangling-ptr-deref.cpp b/clang/test/Analysis/dangling-ptr-deref.cpp index 8572b6416f150f..1c026b5528921b 100644 --- a/clang/test/Analysis/dangling-ptr-deref.cpp +++ b/clang/test/Analysis/dangling-ptr-deref.cpp @@ -72,7 +72,7 @@ void test_case_six() { void test_case_seven() { int *ptr = nullptr; - // expected-note@+3 {{Loop condition is true. Entering loop body}} + // expected-note@+3 {{Loop condition is true. Entering loop body}} // expected-note@+2 {{Assuming 'i' is >= 10}} // expected-note@+1 {{Loop condition is false. Execution continues on line}} for (int i = 0; i < 10; ++i) { // expected-note {{'i' initialized to 0}} diff --git a/clang/test/Analysis/diagnostics/track_subexpressions.cpp b/clang/test/Analysis/diagnostics/track_subexpressions.cpp index c61738ce7b136d..76cf9e3e242850 100644 --- a/clang/test/Analysis/diagnostics/track_subexpressions.cpp +++ b/clang/test/Analysis/diagnostics/track_subexpressions.cpp @@ -37,7 +37,7 @@ void testArrayIndexTracking() { int arr[10]; for (int i = 0; i < 3; ++i) - // expected-note@-1 3{{Loop condition is true. Entering loop body}} + // expected-note@-1 3{{Loop condition is true. Entering loop body}} // expected-note@-2 {{Loop condition is false. Execution continues on line 43}} arr[i] = 0; int x = getInt(); @@ -69,7 +69,7 @@ void testArrayIndexTracking() { int arr[2][10]; for (int i = 0; i < 3; ++i) - // expected-note@-1 3{{Loop condition is true. Entering loop body}} + // expected-note@-1 3{{Loop condition is true. Entering loop body}} // expected-note@-2 {{Loop condition is false. Execution continues on line 75}} arr[1][i] = 0; int x = getInt(); diff --git a/clang/test/Analysis/loop-widening-notes.cpp b/clang/test/Analysis/loop-widening-notes.cpp index a3f030dfe98826..7bd61fe0db4d0f 100644 --- a/clang/test/Analysis/loop-widening-notes.cpp +++ b/clang/test/Analysis/loop-widening-notes.cpp @@ -7,7 +7,7 @@ int test_for_bug_25609() { if (p_a == 0) // expected-note {{Assuming 'p_a' is equal to null}} // expected-note@-1 {{Taking true branch}} bar(); - for (int i = 0; // expected-note {{Loop condition is true. Entering loop body}} + for (int i = 0; // expected-note {{Loop condition is true. Entering loop body}} // expected-note@-1 {{Loop condition is false. Execution continues on line 16}} ++i, // expected-note {{Value assigned to 'p_a'}} i < flag_a; @@ -22,7 +22,7 @@ int flag_b; int while_analyzer_output() { flag_b = 100; int num = 10; - while (flag_b-- > 0) { // expected-note {{Loop condition is true. Entering loop body}} + while (flag_b-- > 0) { // expected-note {{Loop condition is true. Entering loop body}} // expected-note@-1 {{Value assigned to 'num'}} // expected-note@-2 {{Loop condition is false. Execution continues on line 30}} num = flag_b; @@ -43,7 +43,7 @@ int flag_c; int do_while_analyzer_output() { int num = 10; do { // expected-note {{Loop condition is true. Execution continues on line 47}} - // expected-note@-1 {{Loop condition is false. Exiting loop}} + // expected-note@-1 {{Loop condition is false. Exiting loop}} num--; } while (flag_c-- > 0); //expected-note {{Value assigned to 'num'}} int local = 0; @@ -57,7 +57,7 @@ int do_while_analyzer_output() { int flag_d; int test_for_loop() { int num = 10; - for (int i = 0; // expected-note {{Loop condition is true. Entering loop body}} + for (int i = 0; // expected-note {{Loop condition is true. Entering loop body}} // expected-note@-1 {{Loop condition is false. Execution continues on line 67}} new int(10), // expected-note {{Value assigned to 'num'}} i < flag_d; diff --git a/clang/test/Analysis/loop-widening.cpp b/clang/test/Analysis/loop-widening.cpp index fbcb72dee160ae..fa8e9c2f3d6968 100644 --- a/clang/test/Analysis/loop-widening.cpp +++ b/clang/test/Analysis/loop-widening.cpp @@ -14,8 +14,8 @@ void fn1() { A a; A *b = &a; - for (;;) { // expected-note{{Loop condition is true. Entering loop body}} - // expected-note@-1{{Loop condition is true. Entering loop body}} + for (;;) { // expected-note{{Loop condition is true. Entering loop body}} + // expected-note@-1{{Loop condition is true. Entering loop body}} // expected-note@-2{{Value assigned to 'b'}} // no crash during bug report construction diff --git a/clang/test/Analysis/return-ptr-range.cpp b/clang/test/Analysis/return-ptr-range.cpp index 507720a47ea7d5..53612174897c75 100644 --- a/clang/test/Analysis/return-ptr-range.cpp +++ b/clang/test/Analysis/return-ptr-range.cpp @@ -8,7 +8,7 @@ int arr[10]; // expected-note{{Original object declared here}} expected-note{{Or int *ptr; int *test_global_ptr() { - do { // expected-note{{Loop condition is false. Exiting loop}} + do { // expected-note{{Loop condition is false. Exiting loop}} int x = conjure_index(); ptr = arr + x; // expected-note{{Value assigned to 'ptr'}} if (x != 20) // expected-note{{Assuming 'x' is equal to 20}} @@ -22,7 +22,7 @@ int *test_global_ptr() { int *test_local_ptr() { int *local_ptr; - do { // expected-note{{Loop condition is false. Exiting loop}} + do { // expected-note{{Loop condition is false. Exiting loop}} int x = conjure_index(); local_ptr = arr + x; // expected-note{{Value assigned to 'local_ptr'}} if (x != 20) // expected-note{{Assuming 'x' is equal to 20}} diff --git a/clang/test/Analysis/track-control-dependency-conditions.cpp b/clang/test/Analysis/track-control-dependency-conditions.cpp index b762992b6a8f0b..76f9641729de5d 100644 --- a/clang/test/Analysis/track-control-dependency-conditions.cpp +++ b/clang/test/Analysis/track-control-dependency-conditions.cpp @@ -858,7 +858,7 @@ void f(int flag) { bar(); assert(cond1); // expected-note-re{{{{^}}Assuming 'cond1' is not equal to 0{{$}}}} // expected-note-re@-1{{{{^}}Taking false branch{{$}}}} - // expected-note-re@-2{{{{^}}Loop condition is false. Exiting loop{{$}}}} + // expected-note-re@-2{{{{^}}Loop condition is false. Exiting loop{{$}}}} if (flag) // expected-note-re{{{{^}}Assuming 'flag' is not equal to 0{{$}}}} // expected-note-re@-1{{{{^}}Taking true branch{{$}}}} @@ -902,7 +902,7 @@ void f(int flag) { // expected-note-re@-2{{{{^}}Left side of '&&' is true{{$}}}} // expected-note-re@-3{{{{^}}Assuming the condition is false{{$}}}} // expected-note-re@-4{{{{^}}Taking false branch{{$}}}} - // expected-note-re@-5{{{{^}}Loop condition is false. Exiting loop{{$}}}} + // expected-note-re@-5{{{{^}}Loop condition is false. Exiting loop{{$}}}} if (flag) // expected-note-re{{{{^}}Assuming 'flag' is not equal to 0{{$}}}} // expected-note-re@-1{{{{^}}Taking true branch{{$}}}} @@ -945,7 +945,7 @@ void f(int flag) { // expected-note-re@-1{{{{^}}Assuming 'cond1' is not equal to 0{{$}}}} // expected-note-re@-2{{{{^}}Left side of '||' is true{{$}}}} // expected-note-re@-3{{{{^}}Taking false branch{{$}}}} - // expected-note-re@-4{{{{^}}Loop condition is false. Exiting loop{{$}}}} + // expected-note-re@-4{{{{^}}Loop condition is false. Exiting loop{{$}}}} if (flag) // expected-note-re{{{{^}}Assuming 'flag' is not equal to 0{{$}}}} // expected-note-re@-1{{{{^}}Taking true branch{{$}}}} diff --git a/clang/test/Analysis/use-after-move.cpp b/clang/test/Analysis/use-after-move.cpp index fa7893c9a21c8b..a123c41c651e60 100644 --- a/clang/test/Analysis/use-after-move.cpp +++ b/clang/test/Analysis/use-after-move.cpp @@ -303,8 +303,8 @@ void loopTest() { } { A a; - for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} - // peaceful-note@-1 {{Loop condition is true. Entering loop body}} + for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} + // peaceful-note@-1 {{Loop condition is true. Entering loop body}} // peaceful-note@-2 {{Loop condition is false. Execution jumps to the end of the function}} rightRefCall(std::move(a)); // no-warning } @@ -317,8 +317,8 @@ void loopTest() { } { A a; - for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} - // peaceful-note@-1 {{Loop condition is true. Entering loop body}} + for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} + // peaceful-note@-1 {{Loop condition is true. Entering loop body}} // peaceful-note@-2 {{Loop condition is false. Execution jumps to the end of the function}} leftRefCall(a); // no-warning } @@ -331,8 +331,8 @@ void loopTest() { } { A a; - for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} - // peaceful-note@-1 {{Loop condition is true. Entering loop body}} + for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} + // peaceful-note@-1 {{Loop condition is true. Entering loop body}} // peaceful-note@-2 {{Loop condition is false. Execution jumps to the end of the function}} constCopyOrMoveCall(a); // no-warning } @@ -345,8 +345,8 @@ void loopTest() { } { A a; - for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} - // peaceful-note@-1 {{Loop condition is true. Entering loop body}} + for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} + // peaceful-note@-1 {{Loop condition is true. Entering loop body}} // peaceful-note@-2 {{Loop condition is false. Execution jumps to the end of the function}} moveInsideFunctionCall(a); // no-warning } @@ -359,16 +359,16 @@ void loopTest() { } { A a; - for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} - // peaceful-note@-1 {{Loop condition is true. Entering loop body}} + for (int i = 0; i < 2; i++) { // peaceful-note {{Loop condition is true. Entering loop body}} + // peaceful-note@-1 {{Loop condition is true. Entering loop body}} // peaceful-note@-2 {{Loop condition is false. Execution jumps to the end of the function}} copyOrMoveCall(a); // no-warning } } { A a; - for (int i = 0; i < bignum(); i++) { // peaceful-note {{Loop condition is true. Entering loop body}} - // peaceful-note@-1 {{Loop condition is true. Entering loop body}} + for (int i = 0; i < bignum(); i++) { // peaceful-note {{Loop condition is true. Entering loop body}} + // peaceful-note@-1 {{Loop condition is true. Entering loop body}} constCopyOrMoveCall(std::move(a)); // peaceful-note {{Object 'a' is moved}} // peaceful-warning@-1 {{Moved-from object 'a' is moved}} // peaceful-note@-2 {{Moved-from object 'a' is moved}} >From efb65443dd0b1ce7cc3917bbaf2779a97bbce3f3 Mon Sep 17 00:00:00 2001 From: benedekaibas <[email protected]> Date: Thu, 15 Oct 2026 15:06:59 +0200 Subject: [PATCH 2/2] Convert double spaces to single after sentence endings in the CSA. --- clang/docs/ReleaseNotes.md | 1 + .../Checkers/CheckObjCInstMethSignature.cpp | 4 +-- .../Checkers/CheckSecuritySyntaxOnly.cpp | 11 ++++---- .../Checkers/MacOSXAPIChecker.cpp | 4 +-- .../RetainCountDiagnostics.cpp | 4 +-- .../Checkers/StackAddrEscapeChecker.cpp | 2 +- .../Checkers/UnixAPIChecker.cpp | 2 +- clang/test/Analysis/const-method-call.cpp | 2 +- .../cxx-uninitialized-object-ptr-ref.cpp | 12 ++++---- clang/test/Analysis/dispatch-once.m | 4 +-- .../test/Analysis/incorrect-checker-names.cpp | 4 +-- .../test/Analysis/retain-release-path-notes.m | 4 +-- clang/test/Analysis/security-syntax-checks.m | 28 +++++++++---------- clang/test/Analysis/stack-addr-ps.cpp | 4 +-- .../Analysis/stack-capture-leak-no-arc.mm | 4 +-- clang/test/Analysis/stackaddrleak.c | 4 +-- clang/test/Analysis/stackaddrleak.cpp | 2 +- 17 files changed, 49 insertions(+), 47 deletions(-) diff --git a/clang/docs/ReleaseNotes.md b/clang/docs/ReleaseNotes.md index d6c40a2920cf5a..21a7483a2d4eac 100644 --- a/clang/docs/ReleaseNotes.md +++ b/clang/docs/ReleaseNotes.md @@ -1053,6 +1053,7 @@ The `alpha.cplusplus.UseAfterLifetimeEnd` checker was renamed to `alpha.core.Use #### Diagnostic changes - For self-assignments during initialization (`T v = v;`), `core.uninitialized.Assign` will not report them as uninitialized accesses (except C++ reference types), and the checks will be delayed until the first accesses of these variables; `deadcode.DeadStores` will not report them as dead stores. (#GH187530) +- The Clang Static Analyzer's emitted diagnostics (warnings, notes) now consistently have one space after sentence endings (#GH228777). The RFC for this change can be found here: https://discourse.llvm.org/t/rfc-standardization-of-reports-sentence-spacing/92428 (release-notes-sanitizers)= diff --git a/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp b/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp index c8fe5c2ccf384e..010c7589cfca12 100644 --- a/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp @@ -56,11 +56,11 @@ static void CompareReturnTypes(const ObjCMethodDecl *MethDerived, << "', defines the instance method '"; MethDerived->getSelector().print(os); os << "' whose return type is '" << ResDerived - << "'. A method with the same name (same selector) is also defined in " + << "'. A method with the same name (same selector) is also defined in " "class '" << *MethAncestor->getClassInterface() << "' and has a return type of '" << ResAncestor - << "'. These two types are incompatible, and may result in undefined " + << "'. These two types are incompatible, and may result in undefined " "behavior for clients of these classes."; PathDiagnosticLocation MethDLoc = diff --git a/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp b/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp index 797e1efc7e8ca5..eeb6c99c91c6da 100644 --- a/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp @@ -588,7 +588,7 @@ void WalkAST::checkCall_mktemp(const CallExpr *CE, const FunctionDecl *FD) { "Potential insecure temporary file in call 'mktemp'", "Security", "Call to function 'mktemp' is insecure as it always " - "creates or uses insecure temporary file. Use 'mkstemp' " + "creates or uses insecure temporary file. Use 'mkstemp' " "instead", CELoc, CE->getCallee()->getSourceRange()); } @@ -893,7 +893,7 @@ void WalkAST::checkCall_rand(const CallExpr *CE, const FunctionDecl *FD) { llvm::raw_svector_ostream os2(buf2); os2 << "Function '" << *FD << "' is obsolete because it implements a poor random number generator." - << " Use 'arc4random' instead"; + << " Use 'arc4random' instead"; PathDiagnosticLocation CELoc = PathDiagnosticLocation::createBegin(CE, BR.getSourceManager(), AC); @@ -922,8 +922,9 @@ void WalkAST::checkCall_random(const CallExpr *CE, const FunctionDecl *FD) { "'random' is not a secure random number generator", "Security", "The 'random' function produces a sequence of values that " - "an adversary may be able to predict. Use 'arc4random' " - "instead", CELoc, CE->getCallee()->getSourceRange()); + "an adversary may be able to predict. Use 'arc4random' " + "instead", + CELoc, CE->getCallee()->getSourceRange()); } //===----------------------------------------------------------------------===// @@ -1064,7 +1065,7 @@ void WalkAST::checkUncheckedReturnValue(CallExpr *CE) { SmallString<256> buf2; llvm::raw_svector_ostream os2(buf2); os2 << "The return value from the call to '" << *FD - << "' is not checked. If an error occurs in '" << *FD + << "' is not checked. If an error occurs in '" << *FD << "', the following code may execute with unexpected privileges"; PathDiagnosticLocation CELoc = diff --git a/clang/lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp index 6439e6cedac085..9de17198f6bc4f 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp @@ -125,10 +125,10 @@ void MacOSXAPIChecker::CheckDispatchOnce(CheckerContext &C, const CallExpr *CE, } else { os << " stack allocated memory"; } - os << " for the predicate value. Using such transient memory for " + os << " for the predicate value. Using such transient memory for " "the predicate is potentially dangerous."; if (SuggestStatic) - os << " Perhaps you intended to declare the variable as 'static'?"; + os << " Perhaps you intended to declare the variable as 'static'?"; ExplodedNode *N = C.generateErrorNode(); if (!N) diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp index 59d11c4d8ae2cf..10a75aa5874d98 100644 --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp @@ -746,7 +746,7 @@ RefLeakReportVisitor::getEndPath(const ExplodedNode *EndN, os << "whose name ('" << MD->getSelector().getAsString() << "') does not start with " "'copy', 'mutableCopy', 'alloc' or 'new'." - " This violates the naming convention rules" + " This violates the naming convention rules" " given in the Memory Management Guide for Cocoa"; } } else { @@ -754,7 +754,7 @@ RefLeakReportVisitor::getEndPath(const ExplodedNode *EndN, ObjKind K = RV->getObjKind(); if (K == ObjKind::ObjC || K == ObjKind::CF) { os << "whose name ('" << *FD - << "') does not contain 'Copy' or 'Create'. This violates the " + << "') does not contain 'Copy' or 'Create'. This violates the " "naming convention rules given in the Memory Management Guide " "for Core Foundation"; } else if (RV->getObjKind() == ObjKind::OS) { diff --git a/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp index db307d3ac549f6..3ccfb7e15dda20 100644 --- a/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp @@ -585,7 +585,7 @@ void StackAddrEscapeChecker::checkEndFunction(const ReturnStmt *RS, // Generate a report for this bug. const StringRef CommonSuffix = - " upon returning to the caller. This will be a dangling reference"; + " upon returning to the caller. This will be a dangling reference"; SmallString<128> Buf; llvm::raw_svector_ostream Out(Buf); const SourceRange Range = genName(Out, Referred, Ctx.getASTContext()); diff --git a/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp index e51a74f7259752..0a55d1da7f91bc 100644 --- a/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp @@ -435,7 +435,7 @@ void UnixAPIMisuseChecker::CheckPthreadOnce(CheckerContext &C, os << " the local variable '" << VR->getDecl()->getName() << '\''; else os << " stack allocated memory"; - os << " for the \"control\" value. Using such transient memory for " + os << " for the \"control\" value. Using such transient memory for " "the control value is potentially dangerous."; if (isa<VarRegion>(R) && R->hasMemorySpace<StackLocalsSpaceRegion>(state)) os << " Perhaps you intended to declare the variable as 'static'?"; diff --git a/clang/test/Analysis/const-method-call.cpp b/clang/test/Analysis/const-method-call.cpp index b37ce17447bdd2..47467043363eac 100644 --- a/clang/test/Analysis/const-method-call.cpp +++ b/clang/test/Analysis/const-method-call.cpp @@ -314,6 +314,6 @@ template <typename R> class callable<R()> { void entry() { callable<bool()>{}.call().const_method(); - // expected-warning@-1 {{Address of stack memory associated with temporary object of type 'callable<bool ()>' is still referred to by the static variable 'L' upon returning to the caller. This will be a dangling reference}} + // expected-warning@-1 {{Address of stack memory associated with temporary object of type 'callable<bool ()>' is still referred to by the static variable 'L' upon returning to the caller. This will be a dangling reference}} } } // namespace gh77378 diff --git a/clang/test/Analysis/cxx-uninitialized-object-ptr-ref.cpp b/clang/test/Analysis/cxx-uninitialized-object-ptr-ref.cpp index fddd6c8c3d6dfc..87ad5be8fb52f7 100644 --- a/clang/test/Analysis/cxx-uninitialized-object-ptr-ref.cpp +++ b/clang/test/Analysis/cxx-uninitialized-object-ptr-ref.cpp @@ -86,7 +86,7 @@ struct UntypedAllocaTest { // expected-warning-re@+3 {{Address of stack memory allocated by call to \ alloca() on line {{[0-9]+}} is still referred to by a temporary object on the \ -stack upon returning to the caller. This will be a dangling reference}} +stack upon returning to the caller. This will be a dangling reference}} UntypedAllocaTest() : allocaPtr(__builtin_alloca(sizeof(int))) { // All good! } @@ -104,7 +104,7 @@ struct TypedAllocaTest1 { : allocaPtr(static_cast<int *>(__builtin_alloca(sizeof(int)))) {} // expected-warning-re@-2 {{Address of stack memory allocated by call to \ alloca() on line {{[0-9]+}} is still referred to by a temporary object on the \ -stack upon returning to the caller. This will be a dangling reference}} +stack upon returning to the caller. This will be a dangling reference}} }; void fTypedAllocaTest1() { @@ -117,7 +117,7 @@ struct TypedAllocaTest2 { // expected-warning-re@+5 {{Address of stack memory allocated by call to \ alloca() on line {{[0-9]+}} is still referred to by a temporary object on the \ -stack upon returning to the caller. This will be a dangling reference}} +stack upon returning to the caller. This will be a dangling reference}} TypedAllocaTest2() : allocaPtr(static_cast<int *>(__builtin_alloca(sizeof(int)))) { *allocaPtr = 55555; @@ -370,7 +370,7 @@ class VoidPointerRRefTest1 { public: // expected-warning@+3 {{Address of stack memory associated with local \ variable 'vptr' is still referred to by a temporary object on the stack \ -upon returning to the caller. This will be a dangling reference}} +upon returning to the caller. This will be a dangling reference}} VoidPointerRRefTest1(void *vptr, char) : vptrrref(static_cast<void *&&>(vptr)) { // expected-warning {{binding reference member 'vptrrref' to stack allocated parameter 'vptr'}} // All good! } @@ -388,7 +388,7 @@ class VoidPointerRRefTest2 { public: // expected-warning@+3 {{Address of stack memory associated with local \ variable 'vptr' is still referred to by a temporary object on the stack \ -upon returning to the caller. This will be a dangling reference}} +upon returning to the caller. This will be a dangling reference}} VoidPointerRRefTest2(void **vptr, char) : vpptrrref(static_cast<void **&&>(vptr)) { // expected-warning {{binding reference member 'vpptrrref' to stack allocated parameter 'vptr'}} // All good! } @@ -406,7 +406,7 @@ class VoidPointerLRefTest { public: // expected-warning@+3 {{Address of stack memory associated with local \ variable 'vptr' is still referred to by a temporary object on the stack \ -upon returning to the caller. This will be a dangling reference}} +upon returning to the caller. This will be a dangling reference}} VoidPointerLRefTest(void *vptr, char) : vptrrref(static_cast<void *&>(vptr)) { // expected-warning {{binding reference member 'vptrrref' to stack allocated parameter 'vptr'}} // All good! } diff --git a/clang/test/Analysis/dispatch-once.m b/clang/test/Analysis/dispatch-once.m index fa84f563815dd6..045aded3fd192e 100644 --- a/clang/test/Analysis/dispatch-once.m +++ b/clang/test/Analysis/dispatch-once.m @@ -21,7 +21,7 @@ void test_stack(void) { dispatch_once_t once; - dispatch_once(&once, ^{}); // expected-warning{{Call to 'dispatch_once' uses the local variable 'once' for the predicate value. Using such transient memory for the predicate is potentially dangerous. Perhaps you intended to declare the variable as 'static'?}} + dispatch_once(&once, ^{}); // expected-warning{{Call to 'dispatch_once' uses the local variable 'once' for the predicate value. Using such transient memory for the predicate is potentially dangerous. Perhaps you intended to declare the variable as 'static'?}} } void test_static_local(void) { @@ -32,7 +32,7 @@ void test_static_local(void) { void test_heap_var(void) { dispatch_once_t *once = calloc(1, sizeof(dispatch_once_t)); // Use regexps to check that we're NOT suggesting to make this static. - dispatch_once(once, ^{}); // expected-warning-re{{{{^Call to 'dispatch_once' uses heap-allocated memory for the predicate value. Using such transient memory for the predicate is potentially dangerous$}}}} + dispatch_once(once, ^{}); // expected-warning-re{{{{^Call to 'dispatch_once' uses heap-allocated memory for the predicate value. Using such transient memory for the predicate is potentially dangerous$}}}} } void test_external_pointer(dispatch_once_t *once) { diff --git a/clang/test/Analysis/incorrect-checker-names.cpp b/clang/test/Analysis/incorrect-checker-names.cpp index 8dee0b6f468581..3808b2b4f84ac5 100644 --- a/clang/test/Analysis/incorrect-checker-names.cpp +++ b/clang/test/Analysis/incorrect-checker-names.cpp @@ -16,5 +16,5 @@ char const *p; void f0() { char const str[] = "This will change"; p = str; -} // expected-warning@-1{{Address of stack memory associated with local variable 'str' is still referred to by the global variable 'p' upon returning to the caller. This will be a dangling reference [core.StackAddressEscape]}} -// expected-note@-2{{Address of stack memory associated with local variable 'str' is still referred to by the global variable 'p' upon returning to the caller. This will be a dangling reference}} +} // expected-warning@-1{{Address of stack memory associated with local variable 'str' is still referred to by the global variable 'p' upon returning to the caller. This will be a dangling reference [core.StackAddressEscape]}} +// expected-note@-2{{Address of stack memory associated with local variable 'str' is still referred to by the global variable 'p' upon returning to the caller. This will be a dangling reference}} diff --git a/clang/test/Analysis/retain-release-path-notes.m b/clang/test/Analysis/retain-release-path-notes.m index 3c193c1e2bc4fd..5e5d32b0b1553e 100644 --- a/clang/test/Analysis/retain-release-path-notes.m +++ b/clang/test/Analysis/retain-release-path-notes.m @@ -112,7 +112,7 @@ CFTypeRef CFCopyRuleViolation (void) { CFTypeRef CFGetRuleViolation (void) { CFTypeRef object = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object of type 'CFTypeRef' with a +1 retain count}} - return object; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'object' is returned from a function whose name ('CFGetRuleViolation') does not contain 'Copy' or 'Create'. This violates the naming convention rules given in the Memory Management Guide for Core Foundation}} + return object; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'object' is returned from a function whose name ('CFGetRuleViolation') does not contain 'Copy' or 'Create'. This violates the naming convention rules given in the Memory Management Guide for Core Foundation}} } @implementation Foo (FundamentalMemoryManagementRules) @@ -133,7 +133,7 @@ - (id)copyViolationKeyedSubscript { - (id)getViolation { id result = [[Foo alloc] init]; // expected-note{{Method returns an instance of Foo with a +1 retain count}} - return result; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'result' is returned from a method whose name ('getViolation') does not start with 'copy', 'mutableCopy', 'alloc' or 'new'. This violates the naming convention rules given in the Memory Management Guide for Cocoa}} + return result; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'result' is returned from a method whose name ('getViolation') does not start with 'copy', 'mutableCopy', 'alloc' or 'new'. This violates the naming convention rules given in the Memory Management Guide for Cocoa}} } - (id)copyAutorelease { diff --git a/clang/test/Analysis/security-syntax-checks.m b/clang/test/Analysis/security-syntax-checks.m index 154f0c1bae427c..e4699541dff63c 100644 --- a/clang/test/Analysis/security-syntax-checks.m +++ b/clang/test/Analysis/security-syntax-checks.m @@ -100,8 +100,8 @@ void test_getpw(void) { void test_setuid(void) { - setuid(2); // expected-warning{{The return value from the call to 'setuid' is not checked. If an error occurs in 'setuid', the following code may execute with unexpected privileges}} - setuid(0); // expected-warning{{The return value from the call to 'setuid' is not checked. If an error occurs in 'setuid', the following code may execute with unexpected privileges}} + setuid(2); // expected-warning{{The return value from the call to 'setuid' is not checked. If an error occurs in 'setuid', the following code may execute with unexpected privileges}} + setuid(0); // expected-warning{{The return value from the call to 'setuid' is not checked. If an error occurs in 'setuid', the following code may execute with unexpected privileges}} if (setuid (2) != 0) abort(); @@ -113,8 +113,8 @@ void test_setuid(void) check(setuid (2)); // no-warning - setreuid(2,2); // expected-warning{{The return value from the call to 'setreuid' is not checked. If an error occurs in 'setreuid', the following code may execute with unexpected privileges}} - setregid(2,2); // expected-warning{{The return value from the call to 'setregid' is not checked. If an error occurs in 'setregid', the following code may execute with unexpected privileges}} + setreuid(2,2); // expected-warning{{The return value from the call to 'setreuid' is not checked. If an error occurs in 'setreuid', the following code may execute with unexpected privileges}} + setregid(2,2); // expected-warning{{The return value from the call to 'setregid' is not checked. If an error occurs in 'setregid', the following code may execute with unexpected privileges}} } // CWE-338: Use of cryptographically weak prng @@ -135,16 +135,16 @@ void test_rand(void) unsigned short a[7]; unsigned b; - rand(); // expected-warning{{Function 'rand' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} - drand48(); // expected-warning{{Function 'drand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} - erand48(a); // expected-warning{{Function 'erand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} - jrand48(a); // expected-warning{{Function 'jrand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} - lcong48(a); // expected-warning{{Function 'lcong48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} - lrand48(); // expected-warning{{Function 'lrand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} - mrand48(); // expected-warning{{Function 'mrand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} - nrand48(a); // expected-warning{{Function 'nrand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} - rand_r(&b); // expected-warning{{Function 'rand_r' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} - random(); // expected-warning{{The 'random' function produces a sequence of values that an adversary may be able to predict. Use 'arc4random' instead}} + rand(); // expected-warning{{Function 'rand' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} + drand48(); // expected-warning{{Function 'drand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} + erand48(a); // expected-warning{{Function 'erand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} + jrand48(a); // expected-warning{{Function 'jrand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} + lcong48(a); // expected-warning{{Function 'lcong48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} + lrand48(); // expected-warning{{Function 'lrand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} + mrand48(); // expected-warning{{Function 'mrand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} + nrand48(a); // expected-warning{{Function 'nrand48' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} + rand_r(&b); // expected-warning{{Function 'rand_r' is obsolete because it implements a poor random number generator. Use 'arc4random' instead}} + random(); // expected-warning{{The 'random' function produces a sequence of values that an adversary may be able to predict. Use 'arc4random' instead}} } char *mktemp(char *buf); diff --git a/clang/test/Analysis/stack-addr-ps.cpp b/clang/test/Analysis/stack-addr-ps.cpp index 0ca7b074143065..3a14ce0ca55de5 100644 --- a/clang/test/Analysis/stack-addr-ps.cpp +++ b/clang/test/Analysis/stack-addr-ps.cpp @@ -373,7 +373,7 @@ void ***param_ptr_to_ptr_to_ptr_return(void ***ppp) { int local = 0; **ppp = &local; return ppp; - // expected-warning@-1 {{Address of stack memory associated with local variable 'local' is still referred to by the caller variable 'ppp' upon returning to the caller. This will be a dangling reference}} + // expected-warning@-1 {{Address of stack memory associated with local variable 'local' is still referred to by the caller variable 'ppp' upon returning to the caller. This will be a dangling reference}} } void param_ptr_to_ptr_to_ptr_caller(void** pp) { @@ -568,7 +568,7 @@ S returned_struct_with_ptr_callee() { int local = 42; S s; s.p = &local; - return s; // expected-warning {{Address of stack memory associated with local variable 'local' returned to caller}} expected-warning{{Address of stack memory associated with local variable 'local' is still referred to by the caller variable 's' upon returning to the caller. This will be a dangling reference}} + return s; // expected-warning {{Address of stack memory associated with local variable 'local' returned to caller}} expected-warning{{Address of stack memory associated with local variable 'local' is still referred to by the caller variable 's' upon returning to the caller. This will be a dangling reference}} } S leak_through_field_of_returned_object() { diff --git a/clang/test/Analysis/stack-capture-leak-no-arc.mm b/clang/test/Analysis/stack-capture-leak-no-arc.mm index 71145d05072d77..03b3811be38327 100644 --- a/clang/test/Analysis/stack-capture-leak-no-arc.mm +++ b/clang/test/Analysis/stack-capture-leak-no-arc.mm @@ -40,7 +40,7 @@ dispatch_block_t test_block_inside_block_async_leak() { // called. void output_block(dispatch_block_t * blk) { int x = 0; - *blk = ^{ f(x); }; // expected-warning {{Address of stack-allocated block declared on line 43 is still referred to by the caller variable 'blk' upon returning to the caller. This will be a dangling reference [core.StackAddressEscape]}} + *blk = ^{ f(x); }; // expected-warning {{Address of stack-allocated block declared on line 43 is still referred to by the caller variable 'blk' upon returning to the caller. This will be a dangling reference [core.StackAddressEscape]}} } // The block literal captures nothing thus is treated as a constant. @@ -54,7 +54,7 @@ void test_block_leak() { __block dispatch_block_t blk; int x = 0; dispatch_block_t p = ^{ - blk = ^{ // expected-warning {{Address of stack-allocated block declared on line 57 is still referred to by the caller variable 'blk' upon returning to the caller. This will be a dangling reference [core.StackAddressEscape]}} + blk = ^{ // expected-warning {{Address of stack-allocated block declared on line 57 is still referred to by the caller variable 'blk' upon returning to the caller. This will be a dangling reference [core.StackAddressEscape]}} f(x); }; }; diff --git a/clang/test/Analysis/stackaddrleak.c b/clang/test/Analysis/stackaddrleak.c index 96bd4e4ea19e5f..1ec129333a7fec 100644 --- a/clang/test/Analysis/stackaddrleak.c +++ b/clang/test/Analysis/stackaddrleak.c @@ -7,7 +7,7 @@ char const *p; void f0(void) { char const str[] = "This will change"; p = str; -} // expected-warning@-1{{Address of stack memory associated with local variable 'str' is still referred to by the global variable 'p' upon returning to the caller. This will be a dangling reference}} +} // expected-warning@-1{{Address of stack memory associated with local variable 'str' is still referred to by the global variable 'p' upon returning to the caller. This will be a dangling reference}} void f1(void) { char const str[] = "This will change"; @@ -17,7 +17,7 @@ void f1(void) { void f2(void) { p = (const char *) __builtin_alloca(12); -} // expected-warning@-1{{Address of stack memory allocated by call to alloca() on line 19 is still referred to by the global variable 'p' upon returning to the caller. This will be a dangling reference}} +} // expected-warning@-1{{Address of stack memory allocated by call to alloca() on line 19 is still referred to by the global variable 'p' upon returning to the caller. This will be a dangling reference}} // PR 7383 - previously the stack address checker would crash on this example // because it would attempt to do a direct load from 'pr7383_list'. diff --git a/clang/test/Analysis/stackaddrleak.cpp b/clang/test/Analysis/stackaddrleak.cpp index df202a2fee7762..74120fd9fdd4e8 100644 --- a/clang/test/Analysis/stackaddrleak.cpp +++ b/clang/test/Analysis/stackaddrleak.cpp @@ -18,7 +18,7 @@ struct myfunction { myfunction create_func() { int n; auto c = [&n] {}; - return c; // expected-warning {{Address of stack memory associated with local variable 'n' returned to caller}} expected-warning{{Address of stack memory associated with local variable 'n' is still referred to by a temporary object on the stack upon returning to the caller. This will be a dangling reference}} + return c; // expected-warning {{Address of stack memory associated with local variable 'n' returned to caller}} expected-warning{{Address of stack memory associated with local variable 'n' is still referred to by a temporary object on the stack upon returning to the caller. This will be a dangling reference}} } void gh_66221() { create_func()(); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
