ahatanak added a comment. In https://reviews.llvm.org/D45384#1060164, @rjmccall wrote:
> Well, but I think CanPassInRegisters==false in the base class does always > mean CanPassInRegisters==false in the subclass. I think there are cases that is not true. If I compile the following code, S0 (base class) is passed indirectly and S1 (derived class) is passed directly. struct S0 { S0(); S0(const S0 &) = default; S0(S0 &&); ~S0() = default; int *p; }; struct S1 : S0 { S1(); S1(const S1 &) = default; S1(S1 &&) = delete; ~S1() = default; int a; }; void foo1(S0); void foo1(S1); void test0(S0 *a) { foo1(*a); } void test1(S1 *a) { foo1(*a); } By the way, I meant to say "CanPassInRegisters=true in the *base class*" not "CanPassInRegisters=true in the subclass". Repository: rC Clang https://reviews.llvm.org/D45384 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits