[PATCH] D127284: [WIP] [clang-repl] Support statements on global scope in incremental mode.

Vassil Vassilev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Jul 23 14:06:45 PDT 2022


v.g.vassilev added inline comments.


================
Comment at: clang/lib/CodeGen/ModuleBuilder.cpp:179
+    bool
+    HandleTopLevelStmts(const llvm::SmallVectorImpl<Stmt *> &Stmts) override {
+      if (Diags.hasErrorOccurred())
----------------
Hi @rjmccall, this patch tries to add support for statements on the global scope. Essentially we'd like to support something like:

```

int i = 0;
for (; i < 10; i++) {
  ...
}

namespace N {...}

i++;
```

This patch sends statements between two top-level declarations in blocks to CodeGen. I doubt we'd like to dissect CodeGen too much to expose API which can take a statement and put it in the `__cxx_global_var_init`.

The only way I see to minimize the changes to clang is to wrap these statements into a `FunctionDecl` and/or the expression statements into a `VarDecl` initializer and then use CodeGen to emit the relevant code. My hesitation is that if we form the `FunctionDecl` without entering function scope in the frontend, would there be a clean way to instruct CodeGen to run this function as part of the initializer lists.


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

https://reviews.llvm.org/D127284



More information about the cfe-commits mailing list