ahatanak added a comment.

In the following example, should `S1` be passed directly or indirectly? The 
current patch passes it indirectly.
  struct __attribute__((trivial_abi)) S0 {
    S0();
    S0(const S0 &) = delete;
    S0(S0 &&) = delete;
    int a;
  };
  
  struct S1 {
    S0 s0;
  };
  
  void foo1(S1);
  
  void test1() {
    foo1(S1());
  }

In contrast, `S3` in the following example is passed directly.

  struct __attribute__((trivial_abi)) S2 {
    S2();
    S2(const S2 &);
    S2(S2 &&);
    int a;
  };
  
  struct S3 {
    S2 s2;
  };
  
  void foo3(S3);
  
  void test3() {
    foo3(S3());
  }

Both `S1` and `S3` have a member whose type is annotated with `trivial_abi`. 
The only difference is that, in the first case, the copy and move constructors 
of member type `S0` are both deleted.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D92361

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to