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))

`