if parameter never used, is ldc smart enough to remove it ?
John Burton
john.burton at jbmail.com
Tue Jul 16 09:40:21 UTC 2019
On Saturday, 13 July 2019 at 06:33:35 UTC, Newbie2019 wrote:
> for example:
>
> void enforce(bool val, string file = __FILE__, size_t line =
> __LINE__){
> if( !val ) {
> debug printf("%s, from line %d\n", file.ptr, line);
> abort();
> }
> }
>
> __gshared int base = 10;
> int somefn(int val, string file = __FILE__, size_t line =
> __LINE__) {
> enforce(val > 0, file, line);
> return val + base ;
> }
>
> void main(){
> int i = somefn(1);
> }
>
> when build for release, will the parameter reduce into 1 for
> function somefn && enforce ?
Well I put it into http://d.godbolt.org and it seems to be smart
enough to remove all the code from main entirely.
https://d.godbolt.org/z/o-pKBL
Literally compiling your main to :-
_Dmain:
xor eax, eax
ret
If I add a fake function for the value passed in so that it can't
just determine at compile time that main needs to do nothing I
get this :-
https://d.godbolt.org/z/ypgBK2
It has inlined the functions and removed anything to do with the
parameters that are not used.
More information about the digitalmars-d-ldc
mailing list