nickdesaulniers created this revision. Herald added a project: All. nickdesaulniers requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
GCC allows this; we reject it. Link: https://reviews.llvm.org/D145416#inline-1404524 Repository: rG LLVM Github Monorepo 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,7 +7,6 @@ // Ensure we accept pointer and non-pointer arguments to "p" constrained // inputs. asm (""::"p"(t), "p"(p)); - // 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)); + asm ("":"=p"(p)); } 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,7 +7,6 @@ // Ensure we accept pointer and non-pointer arguments to "p" constrained // inputs. asm (""::"p"(t), "p"(p)); - // 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)); + asm ("":"=p"(p)); } 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