[PATCH] D131990: [DRAFT][WebAssembly] Do not support `[[clang::musttail]]` by default
Thomas Lively via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 16 12:59:07 PDT 2022
tlively created this revision.
Herald added subscribers: pmatos, wingo, ecnelises, sunfish, jgravelle-google, sbc100, dschuff.
Herald added a reviewer: aaron.ballman.
Herald added a project: All.
tlively requested review of this revision.
Herald added subscribers: cfe-commits, aheejin.
Herald added a project: clang.
WebAssembly is not able to emit tail calls unless the `tail-call` target feature
is enabled and when it is not enabled, trying to compile musttail calls produces
a fatal error in the backend. To reflect this reality, disable support for the
`[[clang::musttail]]` attribute when targeting WebAssembly without the
`tail-call` feature.
Marked draft for further discussion because I'm not sure getting this:
test.cpp:10:7: warning: unknown attribute 'musttail' ignored [-Wunknown-attributes]
[[clang::musttail]] return bar(x * 10);
is actually better developer experience than getting a fatal error with a
description of the WebAssembly-specific problem. Users can also check for the
presence of the `__wasm_tail_call__` macro as an alternative to checking
`__has_cpp_attribute(clang::musttail)` with this patch, but I'm not sure that's
documented anywhere.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D131990
Files:
clang/include/clang/Basic/Attr.td
Index: clang/include/clang/Basic/Attr.td
===================================================================
--- clang/include/clang/Basic/Attr.td
+++ clang/include/clang/Basic/Attr.td
@@ -414,6 +414,11 @@
def TargetSupportsInitPriority : TargetSpec {
let CustomCode = [{ !Target.getTriple().isOSzOS() }];
}
+
+def TargetSupportsMustTail : TargetSpec {
+ let CustomCode = [{ !Target.getTriple().isWasm() || Target.hasFeature("tail-call") }];
+}
+
// Attribute subject match rules that are used for #pragma clang attribute.
//
// A instance of AttrSubjectMatcherRule represents an individual match rule.
@@ -1433,7 +1438,7 @@
let SimpleHandler = 1;
}
-def MustTail : StmtAttr {
+def MustTail : StmtAttr, TargetSpecificAttr<TargetSupportsMustTail> {
let Spellings = [Clang<"musttail">];
let Documentation = [MustTailDocs];
let Subjects = SubjectList<[ReturnStmt], ErrorDiag, "return statements">;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D131990.453102.patch
Type: text/x-patch
Size: 919 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220816/dcfa2530/attachment-0001.bin>
More information about the cfe-commits
mailing list