Author: Nick Sarnie
Date: 2025-06-07T16:47:28Z
New Revision: 56b98449c8f047c983508b13294a9610f8df0e2b

URL: 
https://github.com/llvm/llvm-project/commit/56b98449c8f047c983508b13294a9610f8df0e2b
DIFF: 
https://github.com/llvm/llvm-project/commit/56b98449c8f047c983508b13294a9610f8df0e2b.diff

LOG: [clang][AST] Fix spaces in TypePrinter for some calling convs (#143160)

There needs to be a space as the first character, otherwise the printed
function prototype will have the CC attribute attached to the final `)`.

I noticed this looking at the AST for a function with
`__attribute__((device_kernel))`

---------

Signed-off-by: Sarnie, Nick <nick.sar...@intel.com>

Added: 
    clang/test/AST/ast-dump-type-callingconv.cpp

Modified: 
    clang/docs/ReleaseNotes.rst
    clang/lib/AST/TypePrinter.cpp

Removed: 
    


################################################################################
diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 74a205a85da5c..1dd8b794c943a 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -842,6 +842,7 @@ Bug Fixes to AST Handling
 - Fixed type checking when a statement expression ends in an l-value of atomic 
type. (#GH106576)
 - Fixed uninitialized use check in a lambda within CXXOperatorCallExpr. 
(#GH129198)
 - Fixed a malformed printout of ``CXXParenListInitExpr`` in certain contexts.
+- Fixed a malformed printout of certain calling convention function 
attributes. (#GH143160)
 
 Miscellaneous Bug Fixes
 ^^^^^^^^^^^^^^^^^^^^^^^

diff  --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp
index 330cfcd962825..d18723d807c6a 100644
--- a/clang/lib/AST/TypePrinter.cpp
+++ b/clang/lib/AST/TypePrinter.cpp
@@ -1095,13 +1095,13 @@ void TypePrinter::printFunctionAfter(const 
FunctionType::ExtInfo &Info,
       OS << " __attribute__((pcs(\"aapcs-vfp\")))";
       break;
     case CC_AArch64VectorCall:
-      OS << "__attribute__((aarch64_vector_pcs))";
+      OS << " __attribute__((aarch64_vector_pcs))";
       break;
     case CC_AArch64SVEPCS:
-      OS << "__attribute__((aarch64_sve_pcs))";
+      OS << " __attribute__((aarch64_sve_pcs))";
       break;
     case CC_DeviceKernel:
-      OS << "__attribute__((device_kernel))";
+      OS << " __attribute__((device_kernel))";
       break;
     case CC_IntelOclBicc:
       OS << " __attribute__((intel_ocl_bicc))";

diff  --git a/clang/test/AST/ast-dump-type-callingconv.cpp 
b/clang/test/AST/ast-dump-type-callingconv.cpp
new file mode 100644
index 0000000000000..1611223acbc80
--- /dev/null
+++ b/clang/test/AST/ast-dump-type-callingconv.cpp
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -triple aarch64 -ast-dump -ast-dump-filter foo %s \
+// RUN: | FileCheck --strict-whitespace %s
+
+// CHECK: foo1 'void () __attribute__((device_kernel))'{{$}}
+void foo1() __attribute__((device_kernel));
+
+// CHECK: foo2 'void () __attribute__((aarch64_vector_pcs))'{{$}}
+void foo2()  __attribute__((aarch64_vector_pcs));
+
+// CHECK: foo3 'void () __attribute__((aarch64_sve_pcs))'{{$}}
+void foo3()  __attribute__((aarch64_sve_pcs));


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to