[PATCH] D100252: [clang] Fix for "Bug 27113 - MSVC-compat __identifier implementation incomplete"
Hans Wennborg via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 19 05:22:37 PDT 2021
hans added a comment.
Interesting, I hadn't seen __identifier before. It seems like a pretty esoteric feature.
================
Comment at: clang/lib/Lex/PPMacroExpansion.cpp:1817
+ else if (Tok.is(tok::string_literal)) {
+ const StringRef StrData(Tok.getLiteralData() + 1, Tok.getLength() - 2);
+ Tok.setIdentifierInfo(this->getIdentifierInfo(StrData));
----------------
I'm not sure this is the right way to get the string out of a string_literal.. this pattern seems more common: https://github.com/llvm/llvm-project/blob/llvmorg-12.0.0/clang/lib/Lex/Pragma.cpp#L755
For example, what should happen with __identifier("foo" "bar")?
================
Comment at: clang/lib/Lex/PPMacroExpansion.cpp:1819
+ Tok.setIdentifierInfo(this->getIdentifierInfo(StrData));
+ Tok.setKind(tok::identifier);
+ } else {
----------------
It says in the bug report that MSVC emits a warning for this. What does the warning look like, and would it make sense for Clang too warn too (it might not, just wondering if we should consider it).
================
Comment at: clang/test/Parser/MicrosoftExtensions.cpp:273
__identifier(+) // expected-error {{cannot convert '+' token to an identifier}}
- __identifier("foo") // expected-error {{cannot convert <string_literal> token to an identifier}}
__identifier(;) // expected-error {{cannot convert ';' token to an identifier}}
----------------
Maybe instead of removing this, move it to the cases that work above. For example, I guess this should work now?
```
int __identifier("foo") = 42;
int bar = foo;
```
================
Comment at: clang/test/Parser/MicrosoftExtensions.cpp:276
+ __identifier("+"); // expected-error {{use of undeclared identifier '+'}}
+ __identifier(";"); // expected-error {{use of undeclared identifier ';'}}
}
----------------
It would be interesting to see a non-error test case too, perhaps with a mangled name like in the PR, and to see that it makes it through to LLVM IR correctly..
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D100252/new/
https://reviews.llvm.org/D100252
More information about the cfe-commits
mailing list