brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · be1a2b3 Raw
110 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -std=c++11 -Wuninitialized -verify %s2 3// test1: Expect no diagnostics4int test1(int x) {5    int y;6    asm goto("" : "=r"(y) : "r"(x) : : err);7    return y;8  err:9    return -1;10}11 12// test2: Expect no diagnostics13int test2(int x) {14  int y;15  if (x < 42)16    asm goto("" : "+S"(x), "+D"(y) : "r"(x) :: indirect_1, indirect_2);17  else18    asm goto("" : "+S"(x), "+D"(y) : "r"(x), "r"(y) :: indirect_1, indirect_2);19  return x + y;20indirect_1:21  return -42;22indirect_2:23  return y;24}25 26// test3: Expect no diagnostics27int test3(int x) {28  int y;29  asm goto("" : "=&r"(y) : "r"(x) : : fail);30normal:31  y += x;32  return y;33  if (x) {34fail:35    return y;36  }37  return 0;38}39 40// test4: Expect no diagnostics41int test4(int x) {42  int y;43  goto forward;44backward:45  return y;46forward:47  asm goto("" : "=r"(y) : "r"(x) : : backward);48  return y;49}50 51// test5: Expect no diagnostics52int test5(int x) {53  int y;54  asm goto("" : "+S"(x), "+D"(y) : "r"(x) :: indirect, fallthrough);55fallthrough:56  return y;57indirect:58  return -2;59}60 61// test6: Expect no diagnostics.62int test6(unsigned int *x) {63  unsigned int val;64 65  // See through casts and unary operators.66  asm goto("" : "=r" (*(unsigned int *)(&val)) ::: indirect);67  *x = val;68  return 0;69indirect:70  return -1;71}72 73// test7: Expect no diagnostics.74int test7(int z) {75    int x;76    if (z)77      asm goto ("":"=r"(x):::A1,A2);78    return 0;79    A1:80    A2:81    return x;82}83 84// test8: Expect no diagnostics85int test8() {86    int x = 0;87    asm goto ("":"=r"(x):::A1,A2);88    return 0;89    A1:90    A2:91    return x;92}93 94// test9: Expect no diagnostics95int test9 (int x) {96    int y;97    asm goto("": "=r"(y) :::out);98    return 42;99out:100    return y;101}102 103int test10() {104  int y; // expected-note {{initialize the variable 'y' to silence this warning}}105  asm goto(""::::out);106  return 42;107out:108  return y; // expected-warning {{variable 'y' is uninitialized when used here}}109}110