<html>
<head>
<base href="https://bugs.llvm.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - Attribute "cold" not permitted on Blocks language extension"
href="https://bugs.llvm.org/show_bug.cgi?id=45720">45720</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Attribute "cold" not permitted on Blocks language extension
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>10.0
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>All
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>enhancement
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>-New Bugs
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>cem@FreeBSD.org
</td>
</tr>
<tr>
<th>CC</th>
<td>htmldeveloper@gmail.com, llvm-bugs@lists.llvm.org, neeilans@live.com, richard-llvm@metafoo.co.uk
</td>
</tr></table>
<p>
<div>
<pre>It seems like block code is function-like enough that it makes sense to be able
to annotate the objects with __attribute__((cold)) (or hot). Currently this is
rejected by Basic/Attr.td due to Cold/Hot SubjectLists containing only
"Function." And I'm sure some support would be needed internally to actually
map hot/cold attributes to meaningful behavior internally.
My observation is that:
1. Blocks are useful for generating known-cold code via macros, such as in
assert or (conditional) debug-level log constructs.
2. Clang attempts to inline all blocks.
3. Even when blocks are not inlined, they are laid out adjacent to their parent
function in .text.
The desired behavior of cold-attribute Blocks is basically that the cold
attribute is passed down to the generated LLVM function corresponding to Block
invocation. This affects NeverInline (2) and perhaps code placement (3).
As a giant kludge for (3), it seems to work to use -ffunction-sections to put
non-inlined blocks in their own sections and carefully use a linker script to
place them far away from other code. I don't have any good workarounds for
(2).</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>