nickdesaulniers updated this revision to Diff 502822.
nickdesaulniers added a comment.

- rebase, additional unit test


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D145430/new/

https://reviews.llvm.org/D145430

Files:
  clang/lib/Basic/TargetInfo.cpp
  clang/test/Sema/inline-asm-validate.c


Index: clang/test/Sema/inline-asm-validate.c
===================================================================
--- clang/test/Sema/inline-asm-validate.c
+++ clang/test/Sema/inline-asm-validate.c
@@ -7,8 +7,6 @@
   // Ensure we accept pointer and non-pointer arguments to "p" constrained
   // inputs.
   asm (""::"p"(t), "p"(p), "p"(&t));
-  // TODO: Ensure we accept p output constraints.
-  asm ("":"=p"(t)); // expected-error{{invalid output constraint '=p' in asm}}
-  asm ("":"=p"(p)); // expected-error{{invalid output constraint '=p' in asm}}
-  asm ("":"=p"(&t)); // expected-error{{invalid output constraint '=p' in asm}}
+  asm ("":"=p"(t), "=p"(p));
+  asm ("":"=p"(&t)); // expected-error{{invalid lvalue in asm output}}
 }
Index: clang/lib/Basic/TargetInfo.cpp
===================================================================
--- clang/lib/Basic/TargetInfo.cpp
+++ clang/lib/Basic/TargetInfo.cpp
@@ -745,6 +745,7 @@
       Info.setAllowsMemory();
       break;
     case 'g': // general register, memory operand or immediate integer.
+    case 'p': // address operand.
     case 'X': // any operand.
       Info.setAllowsRegister();
       Info.setAllowsMemory();


Index: clang/test/Sema/inline-asm-validate.c
===================================================================
--- clang/test/Sema/inline-asm-validate.c
+++ clang/test/Sema/inline-asm-validate.c
@@ -7,8 +7,6 @@
   // Ensure we accept pointer and non-pointer arguments to "p" constrained
   // inputs.
   asm (""::"p"(t), "p"(p), "p"(&t));
-  // TODO: Ensure we accept p output constraints.
-  asm ("":"=p"(t)); // expected-error{{invalid output constraint '=p' in asm}}
-  asm ("":"=p"(p)); // expected-error{{invalid output constraint '=p' in asm}}
-  asm ("":"=p"(&t)); // expected-error{{invalid output constraint '=p' in asm}}
+  asm ("":"=p"(t), "=p"(p));
+  asm ("":"=p"(&t)); // expected-error{{invalid lvalue in asm output}}
 }
Index: clang/lib/Basic/TargetInfo.cpp
===================================================================
--- clang/lib/Basic/TargetInfo.cpp
+++ clang/lib/Basic/TargetInfo.cpp
@@ -745,6 +745,7 @@
       Info.setAllowsMemory();
       break;
     case 'g': // general register, memory operand or immediate integer.
+    case 'p': // address operand.
     case 'X': // any operand.
       Info.setAllowsRegister();
       Info.setAllowsMemory();
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D145430: [clang] ... Nick Desaulniers via Phabricator via cfe-commits
    • [PATCH] D145430: [cl... Nick Desaulniers via Phabricator via cfe-commits

Reply via email to