]> granicus.if.org Git - clang/commitdiff
When a variable has a specified asm name, but isn't using the register storage class...
authorEli Friedman <eli.friedman@gmail.com>
Thu, 15 Mar 2012 23:12:51 +0000 (23:12 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 15 Mar 2012 23:12:51 +0000 (23:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152873 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGStmt.cpp
test/CodeGen/asm-variable.c

index b2da32bb529edbea81debdf2b317b1bdfd806b63..e65c5f468f584e1de0d5f5a2272a7a57f95a129c 100644 (file)
@@ -1295,6 +1295,8 @@ AddVariableConstraints(const std::string &Constraint, const Expr &AsmExpr,
   const VarDecl *Variable = dyn_cast<VarDecl>(&Value);
   if (!Variable)
     return Constraint;
+  if (Variable->getStorageClass() != SC_Register)
+    return Constraint;
   AsmLabelAttr *Attr = Variable->getAttr<AsmLabelAttr>();
   if (!Attr)
     return Constraint;
index a37132d16c2360ef3c36803d2cc7362fa33f7380..dc087bd9e211eca07662053b7dbc14c10c2248d3 100644 (file)
@@ -57,3 +57,9 @@ unsigned long long foo2(unsigned long long addr, double a0,
 }
 
 // CHECK: call i64 asm "call *$1", "={rax},r,{xmm0},{xmm1},{xmm2},{xmm3},{xmm4},{xmm5},{xmm6},{xmm7},~{dirflag},~{fpsr},~{flags}
+
+int randomvar asm("randomvar");
+void foo3() {
+  asm("vartest %0" : : "r"(randomvar));
+}
+// CHECK: call void asm sideeffect "vartest $0", "r,~{dirflag},~{fpsr},~{flags}"