[PATCH] D154764: [ASTImporter] Fields are imported first and reordered for correct layout.
Ding Fei via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 27 21:23:11 PDT 2023
danix800 added inline comments.
================
Comment at: clang/unittests/AST/ASTImporterTest.cpp:8018
+ int m() {
+ return &((A *)0)->f1 - &((A *)0)->f2;
+ }
----------------
shafik wrote:
> So is it the case that this caused `f2` to be imported first and then `f1`? Which is the opposite of the example in the comments:
>
> ```
> struct declToImport {
> int a = c + b;
> int b = 1;
> int c = 2;
> };
> ```
>
> which causes the order to be c, b and then a.
The issue caused by this case
```
int m() {
return &((A *)0)->f1 - &((A *)0)->f2;
}
int f1;
int f2;
```
is that before fixing, method `m` is imported first, which triggers expr (UnaryOperator) dependency computation, further relies on the correct RecordLayout of `declToImport`, but `f1` & `f2` is not imported at this moment.
This is not the opposite to the case like `int a = c + b;`, but both are caused by circular refs.
Similar record layout issue will also be triggered like:
```
class B;
class A {
B* b;
int c;
};
class B {
A *f() { return &((B *)0)->a; }
A a;
};
```
https://reviews.llvm.org/D156201 removes the unnecessary record layout as another fix to this kind of circular refs
(which cannot be fixed simply by re-adjusting import ordering).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D154764/new/
https://reviews.llvm.org/D154764
More information about the cfe-commits
mailing list