<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/82995>82995</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
C++03 mode ignores the arg in [[attribute(arg)]]
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
AMP999
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/aPKq1sKPT
`[[gnu::assume_aligned(4)]] static void *g() { return p; }`
In `-std=c++11` mode, this code is accepted and works as expected. In `-std=c++03` mode, it seems to ignore the `(4)` argument for some reason, and I get an error:
```
<source>:5:3: error: 'assume_aligned' attribute takes at least 1 argument
5 | [[gnu::assume_aligned(4)]] static void *g() { return p; }
| ^
```
@philnik777 I think you enabled attributes in 874217f99b; is there something missing to enable attributes with arguments?
The problem is these lines in `ParseCXX11AttributeArgs`.
```
// If the attribute isn't known, we will not attempt to parse any
// arguments.
if (Form.getSyntax() != ParsedAttr::AS_Microsoft &&
!hasAttribute(LO.CPlusPlus ? AttributeCommonInfo::Syntax::AS_CXX11
: AttributeCommonInfo::Syntax::AS_C23,
ScopeName, AttrName, getTargetInfo(), getLangOpts())) {
```
This is reusing the return code of `hasAttribute` to ask whether the attribute is recognized (a boolean). But the machine-generated code in `AttrHasAttributeImpl.inc` uses the return code to say what `__has_cpp_attribute` should be set to (an int), and invariably returns `0` in C++03 mode. https://godbolt.org/z/casKPfdez
```
} else if (ScopeName == "gnu") {
return llvm::StringSwitch<int>(Name)
[...]
.Case("assume_aligned", LangOpts.CPlusPlus11 ? 1 : 0)
```
That file is generated by `clang/utils/TableGen/ClangAttrEmitter.cpp`. Maybe a change is needed in that generator?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk9zoz4S_TTtS1coEMbAwQf_iXdT85udVCWHuaUEtEEbkFhJjMfz6bdaxk4mk6rdy6-KBBu53-vu99RCOqdaTbSGbAvZfiEn3xm73nx9LMtyUZnmvO68Hx2kGxAHEIfWNJXpfWRsC-LwC8RBPn75T-K-PD5DvId4A6s4YG1bPXFUupHOTQO9yJ6ZGhDFEkQJ2R6yPTovvarxh1ENgti0IAoQJUK-RUt-shpHSLcI-Z5xA8GDRljFd843kO5rEFsQ2ySBVYyDaQjEDn2nHNamIVQOZV3T6KlBqRs8GfvqUDqknyPVnpoIP4OL0_dwyqMjGhx6g6rVxhL6jjjqWssqRmnbaSDt8WgsOjMQWpLOaAZg5gdsyaPUSNYay425detyXb6mO2cmWxOk95BuMkg3KaSbWxCCyD-2M0fpvVXV5Am9fCWH0mNP0nlMbmld4BERM4R8h3-PRDcSnEnuP69yGY-d6rV6zfMcH1gv_YpnMyFpWfWs1bUih0pjkS9Fkh_LsmIi5bj9lkKXObTFQTnHd29mhPcAJ-W7Wx8cpIc5ifD_uSMcral6GmZgR9grfSGGVfworaPd9-9JsrlCbmzrYBVHn9aGeNkn-HAMLnnTRjkNIvf4qs0p2OJEeFJ9j9p4_hkNo-cKRmZEqc8fAG8lRNcFdUQQxcHYIWrJP521lz-v6ogE0j2G7BvO_KLz5unlq6qtceboEcSKrwsYiKST7lYjiOKvb9HusZ8c_yGkB7wt7swwGP2gj-aCOjNfGUK3rrDp5v-PEymI3Rz4VJuR_iWHsAMZ4fq5Jf8sbUs-4IRq58d_Sd1-G727Pixnm36q0zPPCOXQ0nSxTkdXO4fJYY6s_m8tWcUsj3SveOqILfiHwGipNq1Wv4i3SiGxMqYnqUGUEW4nHwIGWXdK011LmqzkyXQZVcFuzPbPd6QPw9hHStdMPjlyf-TpDTp5xlMnPce_vHTSvdTj-CLf5-06M_UNVoSOgsk4O41K-7l9PKKU_iGtklV_nhkcI3LLOLnddTSGuRjh_zoWaum-PB4b-vX5CMj3SL2j2cM3tRHSPRsXhODhJMRvGuK19L7_Mcwe8lbp9umkfN1BuuOK0nsQxcUu5cyWbaMo4nl2gYl20lGwifg4-QR34-qktw2QJGELJMHQ8RvwR1NJj0fVBy-86VuduZF1LzU3Z_KqdyAOzzyo_kEaxGHHS6z5_aC8JxvV48gTBr_Kc0Uose6kbgOqJmqItULPZDMJHw6HRbNOmzIt5YLWSR4XZRZnSbHo1km2jKsyTrNqmTdUHtOSxHJZlOkyk02Z0EKtRSyWsRCrRIgiLaK0qKssyZIsXhX5SiSwjGmQqo-48SzyQjk30boQZZktellR78IrhBCaThgWuZfZfmHXHHNXTa2DZdwr590bile-p_Xv1prP2IvVpW3DzgjHlXw3nSQbbT6iFpPtP76mKN9NVVSbAcQhuOVyuxut-TfVHsQhJMlChCL-GwAA__8cdMNT">