aaron.ballman added a comment. In D76547#4231501 <https://reviews.llvm.org/D76547#4231501>, @sbc100 wrote:
> In D76547#4231476 <https://reviews.llvm.org/D76547#4231476>, @aaron.ballman > wrote: > >> In D76547#4231422 <https://reviews.llvm.org/D76547#4231422>, @sbc100 wrote: >> >>> The reason `__attribute__((export_name("foo")))` doesn't work in all use >>> cases is that we have a lot of existing code that uses the >>> `EMSCRIPTEN_KEEPALIVE` macro. We also have run into other folks who >>> want to include this is some kind of `FOO_API`, or `EXPORT_API` type >>> macros. Its not possible to have such a macro map to the existing >>> export_name since they don't include the symbol name: e.g: >>> >>> EMSCRIPTEN_KEEPALIVE int foo();` >>> >>> JNI_EXPORT int myfunct(); >>> >>> In these cases we need something that uses the llvm symbol name for the >>> export. >> >> I think there's two ways we could address this without adding a new >> attribute (maybe you've thought of this and have reasons for this to be a >> bad suggestion): >> >> - It seems that `export_name` doesn't care if you put in an empty string for >> the argument, so we could treat that case as meaning "export with the name >> of the symbol this attribute is attached to" >> - We could allow `export_name` to take zero or one argument. The >> one-argument form is the same as it is today, but the zero argument form >> exports with the name of the symbol the attribute is attached to. >> >> Do you think either of those could work? > > Yes, I think the second one would be ideal. The first one is slightly less > idea because it prevents something being exported with the empty string as > its name (wasm allows such things). Ah, yeah, that's a good reason to avoid the first one. > Can an attribute take an optional argument? That would be great solution. > For my initial version of this change I did look into making > `export_name(DEFAULT)` work (note the lack of quotes around the word DEFAULT > here), but I could not find way to make a single attribute take both a string > *or* a constant. Yup, it takes only a little bit of extra work to do right. Have the attribute's argument list take a `VariadicStringArgument` instead of `StringArgument` so you can pass zero or more arguments, then have the attribute handler in SemaDeclAttr.cpp diagnose if the attribute is given > 1 argument. The rest should be things like documentation or fall out somewhat naturally (there will be accessors added to the `WebAssemblyExportNameAttr` class that let you access the arguments with iterators, and a size accessor as well, so you can tell if the semantic attribute does/does not have an argument). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76547/new/ https://reviews.llvm.org/D76547 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits