Skip to content

Commit 9d3e26d

Browse files
committed
[WebKit checkers] Treat asm brk as trivial
Like other functions which results in abort, treat asm brk instruction as trivial.
1 parent 13e674e commit 9d3e26d

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,13 @@ class TrivialFunctionAnalysisVisitor
666666
return IsFunctionTrivial(Callee);
667667
}
668668

669+
bool VisitGCCAsmStmt(const GCCAsmStmt *AS) {
670+
auto *Asm = AS->getAsmString();
671+
if (!Asm)
672+
return false;
673+
return Asm->getString() == "brk #0xc471";
674+
}
675+
669676
bool
670677
VisitSubstNonTypeTemplateParmExpr(const SubstNonTypeTemplateParmExpr *E) {
671678
// Non-type template paramter is compile time constant and trivial.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// RUN: %clang_analyze_cc1 -triple arm-darwin -analyzer-checker=alpha.webkit.UncountedCallArgsChecker -verify %s
2+
// expected-no-diagnostics
3+
4+
void crash()
5+
{
6+
__asm__ volatile ("brk #0xc471");
7+
__builtin_unreachable();
8+
}
9+
10+
class SomeObj {
11+
public:
12+
void ref();
13+
void deref();
14+
15+
void someWork() { crash(); }
16+
};
17+
18+
SomeObj* provide();
19+
20+
void doSomeWork() {
21+
provide()->someWork();
22+
}

0 commit comments

Comments
 (0)