D error messages for function call mismatches

FoxyBrown via Digitalmars-d digitalmars-d at puremagic.com
Tue Jun 27 08:52:06 PDT 2017


On Tuesday, 27 June 2017 at 15:01:41 UTC, Adam D. Ruppe wrote:
> On Tuesday, 27 June 2017 at 14:29:05 UTC, FoxyBrown wrote:
>> D's error messaging is terrible in some ways. I am trying to 
>> get some code to work and this is the error:
>
> I agree, that error message is terrible, and that's why I have 
> a PR open to change it.
>
> But this specific case is weird to me too. stb_truetype.d is a 
> port from C code, and I use it without any compile errors. Did 
> you modify the code?
>
>> Find the bug!
>
> Even worse, I don't even see an error in that error message. 
> The arguments it lists look acceptable.

Hi Adam,

Yeah, I don't know, I think I had it working before but now it 
seems a lot of your code is not working. I did not change the 
std_truetype.d file. Just to make sure I copied and pasted the 
git source in to the original.

alias STBTT_sort = core.stdc.stdlib.qsort;

Is it possible that core.stdc.stdlib.qsort changed?

void    qsort(scope void* base, size_t nmemb, size_t size, 
_compare_fp_t
compar);


arsd\stb_truetype.d(1251): Error: function core.stdc.stdlib.qsort 
(scope void* base, uint nmemb, uint size, extern (C) int 
function(scope const(void*), scope const(void*)) @system compar) 
is not callable using argument types (void*, uint, uint, extern 
(C) int function(const(void*) p, const(void*) q))

I changed your variables to size_t and they obviously match. The 
things that don't match are the scope's.

qsort(scope void* base, uint nmemb, uint size, extern (C) int 
function(scope const(void*), scope const(void*)) @system compar)

            (void*,      uint,       uint,      extern (C) int 
function(const(void*) p, const(void*) q))



I am also getting a run time error with your png loading module.


			void popFront () {
				bufpos = 0;
				while (plpos != plpos.max && bufpos < chunkSize) {
					// do we have some bytes in zstream?
					if (zs.avail_in > 0) {
						// just unpack
						zs.next_out = cast(typeof(zs.next_out))(buffer.ptr+bufpos);
						int rd = chunkSize-bufpos;
						zs.avail_out = rd;
						auto err = inflate(&zs, Z_SYNC_FLUSH);
						if (err != Z_STREAM_END && err != Z_OK) throw new 
Exception("PNG unpack error");

Errors out with unpack error. This code used to work so it is 
probably on my system.



More information about the Digitalmars-d mailing list