Currently string attributes on function arguments/return values can b… · llvm/llvm-project@17376c4 (original) (raw)
`@@ -915,14 +915,8 @@ bool LLParser::ParseFnAttributeValuePairs(AttrBuilder &B,
`
915
915
` }
`
916
916
`// Target-dependent attributes:
`
917
917
`case lltok::StringConstant: {
`
918
``
`-
std::string Attr = Lex.getStrVal();
`
919
``
`-
Lex.Lex();
`
920
``
`-
std::string Val;
`
921
``
`-
if (EatIfPresent(lltok::equal) &&
`
922
``
`-
ParseStringConstant(Val))
`
``
918
`+
if (ParseStringAttribute(B))
`
923
919
`return true;
`
924
``
-
925
``
`-
B.addAttribute(Attr, Val);
`
926
920
`continue;
`
927
921
` }
`
928
922
``
`@@ -1229,6 +1223,19 @@ bool LLParser::ParseOptionalAddrSpace(unsigned &AddrSpace) {
`
1229
1223
`ParseToken(lltok::rparen, "expected ')' in address space");
`
1230
1224
`}
`
1231
1225
``
``
1226
`+
/// ParseStringAttribute
`
``
1227
`+
/// := StringConstant
`
``
1228
`+
/// := StringConstant '=' StringConstant
`
``
1229
`+
bool LLParser::ParseStringAttribute(AttrBuilder &B) {
`
``
1230
`+
std::string Attr = Lex.getStrVal();
`
``
1231
`+
Lex.Lex();
`
``
1232
`+
std::string Val;
`
``
1233
`+
if (EatIfPresent(lltok::equal) && ParseStringConstant(Val))
`
``
1234
`+
return true;
`
``
1235
`+
B.addAttribute(Attr, Val);
`
``
1236
`+
return false;
`
``
1237
`+
}
`
``
1238
+
1232
1239
`/// ParseOptionalParamAttrs - Parse a potentially empty list of parameter attributes.
`
1233
1240
`bool LLParser::ParseOptionalParamAttrs(AttrBuilder &B) {
`
1234
1241
`bool HaveError = false;
`
`@@ -1240,6 +1247,11 @@ bool LLParser::ParseOptionalParamAttrs(AttrBuilder &B) {
`
1240
1247
`switch (Token) {
`
1241
1248
`default: // End of attributes.
`
1242
1249
`return HaveError;
`
``
1250
`+
case lltok::StringConstant: {
`
``
1251
`+
if (ParseStringAttribute(B))
`
``
1252
`+
return true;
`
``
1253
`+
continue;
`
``
1254
`+
}
`
1243
1255
`case lltok::kw_align: {
`
1244
1256
`unsigned Alignment;
`
1245
1257
`if (ParseOptionalAlignment(Alignment))
`
`@@ -1321,6 +1333,11 @@ bool LLParser::ParseOptionalReturnAttrs(AttrBuilder &B) {
`
1321
1333
`switch (Token) {
`
1322
1334
`default: // End of attributes.
`
1323
1335
`return HaveError;
`
``
1336
`+
case lltok::StringConstant: {
`
``
1337
`+
if (ParseStringAttribute(B))
`
``
1338
`+
return true;
`
``
1339
`+
continue;
`
``
1340
`+
}
`
1324
1341
`case lltok::kw_dereferenceable: {
`
1325
1342
`uint64_t Bytes;
`
1326
1343
`if (ParseOptionalDerefAttrBytes(lltok::kw_dereferenceable, Bytes))
`