NoQ added a comment.

In D103750#2804438 <https://reviews.llvm.org/D103750#2804438>, @RedDocMD wrote:

> Nice. Looks like I have something to read up on. Turns out, I end up learning 
> something new in C++ every now and then.  😃

Yeah, it's also pretty interesting ABI-wise. As you know, C++ doesn't have 
stable ABI. That said, one popular calling convention for functions that return 
C++ objects by value consists in passing a hidden argument to the function that 
contains the address at which to construct the return value. Like "this" is an 
implicit argument to methods, the return address is yet another implicit 
argument. So you can think of `getReturnValueUnderConstruction()` as of an 
accessor for that implicit argument value similarly to how `getCXXThisVal()` is 
the accessor for the implicit this-argument value.

This is completely different from C where you can return the structure on stack 
or even in registers (which can't be pointed to at all); this becomes possible 
in C because structures can be copied arbitrarily without invoking any sort of 
copy constructor.

----

Random general advice! When writing patches, you typically explore the design 
space of potential solutions - which you did great in this case. When you do 
so, it's a great idea to include the results of such exploration in the commit 
message (and/or in later comments). Especially if the first / most obvious 
thing to try didn't work. If you publish your second-choice solution, people 
will most likely ask you why you chose it instead of the obvious first-choice 
solution so it's an act of friendliness to anticipate this question. Similarly, 
if you have concerns about your solution, please communicate them openly; 
they'll either be discovered anyway but a lot more effort will be spent on it, 
or they won't be discovered during review which could result in future 
problems; both variants are worse than communicating openly. Ideally you carry 
more responsibility for proving that your approach is right than the reviewer 
has a responsibility to find problems in it. The reviewer is the last line of 
defense when it comes to applying critical thinking but the process really 
starts with you as you challenge your own assumptions and approaches by 
questioning both their correctness and their architectural harmony. Trying to 
find at least two solutions to each problem and compare them against each other 
is such a good exercise in critical thinking that almost every patch deserves 
such discussion.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D103750

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

Reply via email to