Summary:
Added entry in switch statement to recognize GCCAsmStmt
as a possible block terminator.
Handling to build CFG using GCCAsmStmt was already implemented.
Reviewers: nickdesaulniers, george.karpenkov, NoQ
Reviewed By: nickdesaulniers, NoQ
Subscribers: xbolva00, tmroeder, xazax.hun, baloghadamsoftware, szepet, a.sidorin, mikhail.ramalho, Szelethus, donat.nagy, dkrupp, Charusso, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D63533
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@364605
91177308-0d34-0410-b5e6-
96231b3b80d8
case Stmt::WhileStmtClass:
HandleBranch(cast<WhileStmt>(Term)->getCond(), Term, B, Pred);
return;
+
+ case Stmt::GCCAsmStmtClass:
+ assert(cast<GCCAsmStmt>(Term)->isAsmGoto() && "Encountered GCCAsmStmt without labels");
+ // TODO: Handle jumping to labels
+ return;
}
}
--- /dev/null
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify %s
+
+// expected-no-diagnostics
+
+void clang_analyzer_warnIfReached();
+
+void testAsmGoto() {
+ asm goto("xor %0, %0\n je %l[label1]\n jl %l[label2]"
+ : /* no outputs */
+ : /* inputs */
+ : /* clobbers */
+ : label1, label2 /* any labels used */);
+
+ // FIXME: Should be reachable.
+ clang_analyzer_warnIfReached();
+
+ label1:
+ // FIXME: Should be reachable.
+ clang_analyzer_warnIfReached();
+ return;
+
+ label2:
+ // FIXME: Should be reachable.
+ clang_analyzer_warnIfReached();
+ return;
+}