From 2f9a458f35ccd0fc45067afda346fd59052d0c0c Mon Sep 17 00:00:00 2001 From: Ryosuke Niwa Date: Thu, 11 Sep 2025 14:49:59 -0700 Subject: [PATCH] [WebKit checkers] Treat asm brk as trivial (#155046) Like other functions which results in abort, treat asm brk instruction as trivial. --- .../Checkers/WebKit/PtrTypesSemantics.cpp | 4 ++++ .../WebKit/trivial-code-check-asm-brk.cpp | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 clang/test/Analysis/Checkers/WebKit/trivial-code-check-asm-brk.cpp diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp index 884dbe90e7b1..56747d72136e 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp @@ -666,6 +666,10 @@ public: return IsFunctionTrivial(Callee); } + bool VisitGCCAsmStmt(const GCCAsmStmt *AS) { + return AS->getAsmString() == "brk #0xc471"; + } + bool VisitSubstNonTypeTemplateParmExpr(const SubstNonTypeTemplateParmExpr *E) { // Non-type template paramter is compile time constant and trivial. diff --git a/clang/test/Analysis/Checkers/WebKit/trivial-code-check-asm-brk.cpp b/clang/test/Analysis/Checkers/WebKit/trivial-code-check-asm-brk.cpp new file mode 100644 index 000000000000..de98c77eb734 --- /dev/null +++ b/clang/test/Analysis/Checkers/WebKit/trivial-code-check-asm-brk.cpp @@ -0,0 +1,22 @@ +// RUN: %clang_analyze_cc1 -triple arm-darwin -analyzer-checker=alpha.webkit.UncountedCallArgsChecker -verify %s +// expected-no-diagnostics + +void crash() +{ + __asm__ volatile ("brk #0xc471"); + __builtin_unreachable(); +} + +class SomeObj { +public: + void ref(); + void deref(); + + void someWork() { crash(); } +}; + +SomeObj* provide(); + +void doSomeWork() { + provide()->someWork(); +}