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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to