aaron.ballman added inline comments.

================
Comment at: clang/lib/Parse/ParseExpr.cpp:3501-3503
+    } else if (!AllowEvaluatedString && tok::isStringLiteral(Tok.getKind())) {
+      Expr = ParseUnevaluatedStringLiteralExpression();
+    } else {
----------------
cor3ntin wrote:
> aaron.ballman wrote:
> > cor3ntin wrote:
> > > aaron.ballman wrote:
> > > > I'm surprised we need special logic in `ParseExpressionList()` for 
> > > > handling unevaluated string literals; I would have expected that to be 
> > > > needed when parsing a string literal. Nothing changed in the grammar 
> > > > for http://eel.is/c++draft/expr.post.general#nt:expression-list (or 
> > > > initializer-list), so these changes seem wrong. Can you explain the 
> > > > changes a bit more?
> > > We use `ParseExpressionList` when parsing attribute arguments, and some 
> > > attributes have unevaluate string as argument - I agree with you that I'd 
> > > rather find a better solution for attributes, but I came up empty. There 
> > > is no further reason for this change, and you are right it does not match 
> > > the grammar.
> > I was thinking we'd use a new kind of evaluation context for this. We'd 
> > enter the evaluation context when we know we need to parse an expression 
> > that is an unevaluated string literal which the string literal parser would 
> > pay attention to. This would require knowing up-front when we want to parse 
> > an unevaluated string literal, but we should have that information 
> > available to us at parse time (I think).
> After offline discussion, i think what we want to be doing is to have a
> 
> `ParseAtttributeArgumentList` function that is aware of whether the Nth 
> argument is an unevaluated string - by means of modifying tablegen,
> and doing the right parsing accordingly.
> It would take care of all attributes automatically.
> Alas that's a tad more involved.
+1

I agree it's more involved, but it's also a more general solution that fits 
nicely in the parser design (we do this sort of thing for other parts of 
attribute parsing).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D105759/new/

https://reviews.llvm.org/D105759

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to