rnk added a comment. Interesting. In Clang, we basically layer the C++ rules over the C rules: if C++ aspects of a class allow it to be passed directly transparently, then we defer down to the C rules, which deal with HVAs, structs, and things like that.
In D153179#4429813 <https://reviews.llvm.org/D153179#4429813>, @efriedma wrote: > Restrict to AArch64. > > Actually, it seems like something sort of similar happens with x86 > vectorcall. But I haven't tried to test all the permutations of that, so > don't modify the behavior for now. Can you file an issue for that and cc me? ================ Comment at: clang/test/CodeGenCXX/homogeneous-aggregates.cpp:294 +typedef double V __attribute((ext_vector_type(2))); +struct base { V v; }; +struct test { test(double); protected: V v2;}; ---------------- Can you do the same test again with a non-vector field (double) for test coverage? ================ Comment at: clang/test/CodeGenCXX/homogeneous-aggregates.cpp:295 +struct base { V v; }; +struct test { test(double); protected: V v2;}; +test f(test *x) { return *x; } ---------------- Did you mean to inherit from `base` here to make a two-element HVA? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D153179/new/ https://reviews.llvm.org/D153179 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits