50 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -std=c++23 -fsyntax-only %s -verify2// RUN: %clang_cc1 -triple x86_64-unknown-windows-itanium -std=c++23 -fsyntax-only %s -verify3 4struct S {5 void operator()();6};7 8struct T {9 virtual void operator()();10};11 12struct U {13 static void operator()();14};15 16struct V: virtual T {17 virtual void f();18};19 20struct W : virtual V {21 int i;22};23 24struct X {25 __UINTPTR_TYPE__ ptr;26 __UINTPTR_TYPE__ adj;27};28 29auto L = [](){};30 31void f() {32 auto pmf = &S::operator();33 34 __asm__ __volatile__ ("" : : "r"(&decltype(L)::operator()));35 // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}}36 __asm__ __volatile__ ("" : : "r"(&S::operator()));37 // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}}38 __asm__ __volatile__ ("" : : "r"(&T::operator()));39 // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}}40 __asm__ __volatile__ ("" : : "r"(pmf));41 // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}}42 __asm__ __volatile__ ("" : : "r"(&W::f));43 // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}}44 __asm__ __volatile__ ("" : : "r"(&W::i));45 // expected-error@-1{{cannot pass a pointer-to-member through register-constrained inline assembly parameter}}46 47 __asm__ __volatile__ ("" : : "r"(X{0,0}));48 __asm__ __volatile__ ("" : : "r"(&U::operator()));49}50