// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -std=c++23 -fsyntax-only %s -verify // RUN: %clang_cc1 -triple x86_64-unknown-windows-itanium -std=c++23 -fsyntax-only %s -verify struct S { void operator()(); }; struct T { virtual void operator()(); }; struct U { static void operator()(); }; struct V: virtual T { virtual void f(); }; struct W : virtual V { int i; }; struct X { __UINTPTR_TYPE__ ptr; __UINTPTR_TYPE__ adj; }; auto L = [](){}; void f() { auto pmf = &S::operator(); __asm__ __volatile__ ("" : : "r"(&decltype(L)::operator())); // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}} __asm__ __volatile__ ("" : : "r"(&S::operator())); // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}} __asm__ __volatile__ ("" : : "r"(&T::operator())); // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}} __asm__ __volatile__ ("" : : "r"(pmf)); // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}} __asm__ __volatile__ ("" : : "r"(&W::f)); // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}} __asm__ __volatile__ ("" : : "r"(&W::i)); // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}} __asm__ __volatile__ ("" : : "r"(X{0,0})); __asm__ __volatile__ ("" : : "r"(&U::operator())); }