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