v.g.vassilev added a comment.
Thanks for the prompt reply.
We have seen that when there is an inline/weak symbol with no use CodeGen
decides not to emit that symbol and moves it into a map. Upon a use it would
lazily emit it. However, in cling/clang-repl the use might come on the next
line, which means that we called `CodeGeneratorImpl::StartModule` which has
called `CodeGeneratorImpl::Initialize` and reset `Builder`. By that time we
have lost the information if we emitted the symbol or not.
The intent of this patch is to selectively carry some state over to the
`Builder` so that we can keep track of the lazy decisions the previous builder
took. If we eagerly emit declarations we have no problems `clang-repl -Xcc
-Xclang -Xcc -femit-all-decls "inline int f() { return 1; }" "int i = f();"`
makes it work. However it seems an overkill.
A second goal of this patch is to start a discussion if/how we could do it
better as carrying state is error-prone...
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D126781/new/
https://reviews.llvm.org/D126781
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits