https://github.com/th0br0 created https://github.com/llvm/llvm-project/pull/147724
Reverts llvm/llvm-project#147285 Looks like I need to limit the test's target triple. >From 07dc90502cb1686f904f2f0722567438f088083e Mon Sep 17 00:00:00 2001 From: "Andreas C. Osowski" <andr...@osowski.de> Date: Wed, 9 Jul 2025 15:17:23 +0200 Subject: [PATCH] =?UTF-8?q?Revert=20"[clang][AST]=20Fix=20positioning=20of?= =?UTF-8?q?=20preserve=20cconv=20attributes=20in=20TypePrin=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit ab187bbd3a5c64451846aa3480f271a93dfba760. --- clang/lib/AST/TypePrinter.cpp | 33 +++++++-------------- clang/test/AST/ast-print-cconv-preserve.cpp | 14 --------- clang/test/Sema/preserve-call-conv.c | 8 ++--- clang/test/Sema/preserve-none-call-conv.c | 4 +-- clang/test/SemaCXX/lambda-attributes.cpp | 6 ++-- 5 files changed, 19 insertions(+), 46 deletions(-) delete mode 100644 clang/test/AST/ast-print-cconv-preserve.cpp diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp index 818d2139628e3..d18723d807c6a 100644 --- a/clang/lib/AST/TypePrinter.cpp +++ b/clang/lib/AST/TypePrinter.cpp @@ -1861,17 +1861,6 @@ void TypePrinter::printAttributedBefore(const AttributedType *T, if (T->getAttrKind() == attr::ObjCKindOf) OS << "__kindof "; - if (T->getAttrKind() == attr::PreserveNone) { - OS << "__attribute__((preserve_none)) "; - spaceBeforePlaceHolder(OS); - } else if (T->getAttrKind() == attr::PreserveMost) { - OS << "__attribute__((preserve_most)) "; - spaceBeforePlaceHolder(OS); - } else if (T->getAttrKind() == attr::PreserveAll) { - OS << "__attribute__((preserve_all)) "; - spaceBeforePlaceHolder(OS); - } - if (T->getAttrKind() == attr::AddressSpace) printBefore(T->getEquivalentType(), OS); else @@ -1983,13 +1972,6 @@ void TypePrinter::printAttributedAfter(const AttributedType *T, return; } - if (T->getAttrKind() == attr::PreserveAll || - T->getAttrKind() == attr::PreserveMost || - T->getAttrKind() == attr::PreserveNone) { - // This has to be printed before the type. - return; - } - OS << " __attribute__(("; switch (T->getAttrKind()) { #define TYPE_ATTR(NAME) @@ -2054,9 +2036,6 @@ void TypePrinter::printAttributedAfter(const AttributedType *T, case attr::Blocking: case attr::Allocating: case attr::SwiftAttr: - case attr::PreserveAll: - case attr::PreserveMost: - case attr::PreserveNone: llvm_unreachable("This attribute should have been handled already"); case attr::NSReturnsRetained: @@ -2092,12 +2071,20 @@ void TypePrinter::printAttributedAfter(const AttributedType *T, case attr::DeviceKernel: OS << T->getAttr()->getSpelling(); break; - case attr::IntelOclBicc: - OS << "inteloclbicc"; + case attr::IntelOclBicc: OS << "inteloclbicc"; break; + case attr::PreserveMost: + OS << "preserve_most"; + break; + + case attr::PreserveAll: + OS << "preserve_all"; break; case attr::M68kRTD: OS << "m68k_rtd"; break; + case attr::PreserveNone: + OS << "preserve_none"; + break; case attr::RISCVVectorCC: OS << "riscv_vector_cc"; break; diff --git a/clang/test/AST/ast-print-cconv-preserve.cpp b/clang/test/AST/ast-print-cconv-preserve.cpp deleted file mode 100644 index af12fe64b2278..0000000000000 --- a/clang/test/AST/ast-print-cconv-preserve.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// RUN: %clang_cc1 -ast-print %s -o - | FileCheck %s - -void (__attribute__((preserve_none)) *none)(); - -// CHECK: __attribute__((preserve_none)) void (*none)(); - -__attribute__((preserve_all)) void (*all)(); - -// CHECK: __attribute__((preserve_all)) void ((*all))(); - -__attribute__((preserve_most)) void (*most)(); - -// CHECK: __attribute__((preserve_most)) void ((*most))(); - diff --git a/clang/test/Sema/preserve-call-conv.c b/clang/test/Sema/preserve-call-conv.c index 01d0872bd6c55..adb851960b2e3 100644 --- a/clang/test/Sema/preserve-call-conv.c +++ b/clang/test/Sema/preserve-call-conv.c @@ -14,8 +14,8 @@ void __attribute__((preserve_most(1))) foo1(void *ptr) { // expected-error {{'pr void (__attribute__((preserve_most)) *pfoo1)(void *) = foo; -void (__attribute__((cdecl)) *pfoo2)(void *) = foo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type '__attribute__((preserve_most)) void (void *)'}} -void (*pfoo3)(void *) = foo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *)' with an expression of type '__attribute__((preserve_most)) void (void *)'}} +void (__attribute__((cdecl)) *pfoo2)(void *) = foo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type 'void (void *) __attribute__((preserve_most))'}} +void (*pfoo3)(void *) = foo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *)' with an expression of type 'void (void *) __attribute__((preserve_most))'}} typedef_fun_t typedef_fun_foo; // expected-note {{previous declaration is here}} void __attribute__((preserve_most)) typedef_fun_foo(int x) { } // expected-error {{function declared 'preserve_most' here was previously declared without calling convention}} @@ -30,8 +30,8 @@ void __attribute__((preserve_all(1))) boo1(void *ptr) { // expected-error {{'pre void (__attribute__((preserve_all)) *pboo1)(void *) = boo; -void (__attribute__((cdecl)) *pboo2)(void *) = boo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type '__attribute__((preserve_all)) void (void *)'}} -void (*pboo3)(void *) = boo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *)' with an expression of type '__attribute__((preserve_all)) void (void *)'}} +void (__attribute__((cdecl)) *pboo2)(void *) = boo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type 'void (void *) __attribute__((preserve_all))'}} +void (*pboo3)(void *) = boo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *)' with an expression of type 'void (void *) __attribute__((preserve_all))'}} typedef_fun_t typedef_fun_boo; // expected-note {{previous declaration is here}} void __attribute__((preserve_all)) typedef_fun_boo(int x) { } // expected-error {{function declared 'preserve_all' here was previously declared without calling convention}} diff --git a/clang/test/Sema/preserve-none-call-conv.c b/clang/test/Sema/preserve-none-call-conv.c index fc9463726e3f5..678fa7d5317e5 100644 --- a/clang/test/Sema/preserve-none-call-conv.c +++ b/clang/test/Sema/preserve-none-call-conv.c @@ -11,8 +11,8 @@ void __attribute__((preserve_none(1))) boo1(void *ptr) { // expected-error {{'pr void (__attribute__((preserve_none)) *pboo1)(void *) = boo; -void (__attribute__((cdecl)) *pboo2)(void *) = boo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type '__attribute__((preserve_none)) void (void *)'}} -void (*pboo3)(void *) = boo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *)' with an expression of type '__attribute__((preserve_none)) void (void *)'}} +void (__attribute__((cdecl)) *pboo2)(void *) = boo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type 'void (void *) __attribute__((preserve_none))'}} +void (*pboo3)(void *) = boo; // expected-error {{incompatible function pointer types initializing 'void (*)(void *)' with an expression of type 'void (void *) __attribute__((preserve_none))'}} typedef_fun_t typedef_fun_boo; // expected-note {{previous declaration is here}} void __attribute__((preserve_none)) typedef_fun_boo(int x) { } // expected-error {{function declared 'preserve_none' here was previously declared without calling convention}} diff --git a/clang/test/SemaCXX/lambda-attributes.cpp b/clang/test/SemaCXX/lambda-attributes.cpp index d9764cfe4b204..97d23053b0f46 100644 --- a/clang/test/SemaCXX/lambda-attributes.cpp +++ b/clang/test/SemaCXX/lambda-attributes.cpp @@ -14,7 +14,7 @@ // CHECK: FunctionDecl {{.*}} f 'void ()' implicit_instantiation template <typename T> void f() { - // CHECK: CXXMethodDecl {{.*}} operator() '__attribute__((preserve_most)) void (int) const':'void (int) __attribute__((preserve_most)) const' implicit_instantiation + // CHECK: CXXMethodDecl {{.*}} operator() 'void (int) const __attribute__((preserve_most))':'void (int) __attribute__((preserve_most)) const' implicit_instantiation (void) [] (T) __attribute__((preserve_most)) { }; // CHECK: CXXMethodDecl {{.*}} operator() 'void (int) const {{\[}}[clang::annotate_type(...)]]':'void (int) const' implicit_instantiation @@ -25,7 +25,7 @@ void f() { [[clang::annotate_type("foo")]] [[clang::annotate_type("foo")]] { }; - // CHECK: CXXMethodDecl {{.*}} operator() '__attribute__((preserve_most)) void (int) const {{\[}}[clang::annotate_type(...)]]':'void (int) __attribute__((preserve_most)) const' implicit_instantiation + // CHECK: CXXMethodDecl {{.*}} operator() 'void (int) const __attribute__((preserve_most)) {{\[}}[clang::annotate_type(...)]]':'void (int) __attribute__((preserve_most)) const' implicit_instantiation (void) [] (T) __attribute__((preserve_most)) [[clang::annotate_type("foo")]] { }; @@ -36,7 +36,7 @@ void f() { // CHECK: CXXMethodDecl {{.*}} operator() 'void (int) const {{\[}}[clang::annotate_type(...)]]':'void (int) const' implicit_instantiation (void) [] (T t) [[clang::annotate_type("foo", t)]] { }; - // CHECK: CXXMethodDecl {{.*}} operator() '__attribute__((preserve_most)) void (int) const {{\[}}[clang::annotate_type(...)]]':'void (int) __attribute__((preserve_most)) const' implicit_instantiation + // CHECK: CXXMethodDecl {{.*}} operator() 'void (int) const __attribute__((preserve_most)) {{\[}}[clang::annotate_type(...)]]':'void (int) __attribute__((preserve_most)) const' implicit_instantiation (void) [] (T t) __attribute__((preserve_most)) [[clang::annotate_type("foo", t, t, t, t)]] { }; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits