Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions clang/lib/AST/TypePrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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))";
Expand Down
24 changes: 24 additions & 0 deletions clang/test/AST/ast-dump-type-callingconv.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Verify there is a space after the parens when priting callingconv attributes.
// RUN: %clang_cc1 -DDEVICE -triple spirv64 -ast-dump -ast-dump-filter foo %s \
// RUN: | FileCheck -check-prefix=CHECK-DEVICE --strict-whitespace %s

// RUN: %clang_cc1 -DVECTOR -triple aarch64 -ast-dump -ast-dump-filter foo %s \
// RUN: | FileCheck -check-prefix=CHECK-VECTOR --strict-whitespace %s

// RUN: %clang_cc1 -DSVE -triple aarch64 -ast-dump -ast-dump-filter foo %s \
// RUN: | FileCheck -check-prefix=CHECK-SVE --strict-whitespace %s

#ifdef DEVICE
// CHECK-DEVICE-NOT: ()__attribute__((device_kernel))
void foo() __attribute__((device_kernel));
#endif

#ifdef VECTOR
// CHECK-VECTOR-NOT: ()__attribute__((aarch64_vector_pcs))
void foo() __attribute__((aarch64_vector_pcs));
#endif

#ifdef SVE
// CHECK-SVE-NOT: ()__attribute__((aarch64_sve_pcs))
void foo() __attribute__((aarch64_sve_pcs));
#endif
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you make this test a positive pattern, instead of a CHECK-NOT? Otherwise the test is a bit fragile.
This shouldn't be problem, since you already have strict-whitespace passed to FileCheck.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, with a positive pattern, it shouldn't be necessary to run the test three separate times, and you can remove the #ifdefs

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the review. I did the negative check because before this change the AST print is a little different for some reason where it contains the good string as part of the overall string, ex:

foo3 'void () __attribute__((aarch64_sve_pcs))':'void ()__attribute__((aarch64_sve_pcs))'

and after the fix the output is only

foo3 'void () __attribute__((aarch64_sve_pcs))'

so checking for foo3 'void () __attribute__((aarch64_sve_pcs))' doesn't work because it's a substring in the bad case.

but I managed to fix it by using regex and checking for EOL, it's not super pretty though, just pushed it, thanks.