1b8fee677SJennifer Yu // RUN: %clang_analyze_cc1 -triple i386-pc-linux-gnu -analyzer-checker=debug.DumpCFG %s 2>&1 | FileCheck %s 2b8fee677SJennifer Yu // RUN: %clang_analyze_cc1 -triple x86_64-pc-linux-gnu -analyzer-checker=debug.DumpCFG %s 2>&1 | FileCheck %s 3b8fee677SJennifer Yu foo(int cond)4b8fee677SJennifer Yuint foo(int cond) 5b8fee677SJennifer Yu { 6b8fee677SJennifer Yu label_true: 7b8fee677SJennifer Yu asm goto("testl %0, %0; jne %l1;" :: "r"(cond)::label_true, loop); 8b8fee677SJennifer Yu return 0; 9b8fee677SJennifer Yu loop: 10b8fee677SJennifer Yu return 0; 11b8fee677SJennifer Yu } 12b8fee677SJennifer Yu 13b8fee677SJennifer Yu // CHECK-LABEL: loop 14b8fee677SJennifer Yu // CHECK-NEXT: 0 15b8fee677SJennifer Yu // CHECK-NEXT: return 16b8fee677SJennifer Yu // CHECK-NEXT: Preds (1): B3 17b8fee677SJennifer Yu // CHECK-NEXT: Succs (1): B0 18b8fee677SJennifer Yu 19b8fee677SJennifer Yu // CHECK-LABEL: label_true 20*3a604fdbSNick Desaulniers // CHECK-NEXT: cond 21*3a604fdbSNick Desaulniers // CHECK-NEXT: [B3.1] 22*3a604fdbSNick Desaulniers // CHECK-NEXT: T: asm goto 23b8fee677SJennifer Yu // CHECK-NEXT: Preds (2): B3 B4 24b8fee677SJennifer Yu // CHECK-NEXT: Succs (3): B2 B3 B1 25b8fee677SJennifer Yu bar(int cond)26b8fee677SJennifer Yuint bar(int cond) 27b8fee677SJennifer Yu { 28b8fee677SJennifer Yu asm goto("testl %0, %0; jne %l1;" :: "r"(cond)::L1, L2); 29b8fee677SJennifer Yu return 0; 30b8fee677SJennifer Yu L1: 31b8fee677SJennifer Yu L2: 32b8fee677SJennifer Yu return 0; 33b8fee677SJennifer Yu } 34b8fee677SJennifer Yu 35b8fee677SJennifer Yu // CHECK: [B4] 36*3a604fdbSNick Desaulniers // CHECK-NEXT: cond 37*3a604fdbSNick Desaulniers // CHECK-NEXT: [B4.1] 38*3a604fdbSNick Desaulniers // CHECK-NEXT: T: asm goto 39b8fee677SJennifer Yu // CHECK-NEXT: Preds (1): B5 40b8fee677SJennifer Yu // CHECK-NEXT: Succs (3): B3 B2 B1 41b8fee677SJennifer Yu zoo(int n)42b8fee677SJennifer Yuint zoo(int n) 43b8fee677SJennifer Yu { 44b8fee677SJennifer Yu A5: 45b8fee677SJennifer Yu A1: 46b8fee677SJennifer Yu asm goto("testl %0, %0; jne %l1;" :: "r"(n)::A1, A2, A3, A4, A5); 47b8fee677SJennifer Yu A2: 48b8fee677SJennifer Yu A3: 49b8fee677SJennifer Yu A4: 50b8fee677SJennifer Yu return 0; 51b8fee677SJennifer Yu } 52b8fee677SJennifer Yu 53b8fee677SJennifer Yu // CHECK-LABEL: A1 54*3a604fdbSNick Desaulniers // CHECK-NEXT: n 55*3a604fdbSNick Desaulniers // CHECK-NEXT: [B4.1] 56*3a604fdbSNick Desaulniers // CHECK-NEXT: T: asm goto 57b8fee677SJennifer Yu // CHECK-NEXT: Preds (2): B5 B4 58b8fee677SJennifer Yu // CHECK-NEXT: Succs (5): B3 B4 B2 B1 B5 59*3a604fdbSNick Desaulniers baz(void)60*3a604fdbSNick Desaulniersvoid baz(void) 61*3a604fdbSNick Desaulniers { 62*3a604fdbSNick Desaulniers asm goto("" :: "r"(1 ? 2 : 0 << -1) :: error); 63*3a604fdbSNick Desaulniers error:; 64*3a604fdbSNick Desaulniers } 65*3a604fdbSNick Desaulniers 66*3a604fdbSNick Desaulniers // CHECK: [B2] 67*3a604fdbSNick Desaulniers // CHECK-NEXT: 1: [B5.2] ? [B3.1] : [B4.4] 68*3a604fdbSNick Desaulniers // CHECK-NEXT: T: asm goto ("" : : "r" ([B2.1]) : : error); 69*3a604fdbSNick Desaulniers // CHECK-NEXT: Preds (2): B3 B4 70*3a604fdbSNick Desaulniers // CHECK-NEXT: Succs (1): B1 71