Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29276 Discussions

Error 6284 with function getfileinfogg

fbalderasintel
1,507 Views
Using IVF 11.1.048 on MSVS 2008, x64 build on Vista.

We are now convertingFortran fromx32 to x64.
Getting this error on the x64 build "6284 No matching specific function for the generic function reference"

Do you have any suggestions? Should we send sample code?
Thanks in advance.
0 Kudos
7 Replies
Steven_L_Intel1
Employee
1,507 Views
You probably need to change the declared type of the buffer argument to FILE$INFOI8. Please see the documentation on GETFILEINFOQQ for more details.
0 Kudos
DavidWhite
Valued Contributor II
1,507 Views
Steve,

Some of the documentation files have inappropriate preformatted text, including GETFILINFOQQ and GETFONTINFO, for example.

The text above the description of the derived types does not wrap to the width of the screen, making it hard to read.

Thanks,

David
0 Kudos
Steven_L_Intel1
Employee
1,507 Views
David,

Yes, I see what you mean. I'm glad to report that this is already resolved for our next major release.
0 Kudos
Brian_A_
Novice
1,507 Views
We are getting the same error when converting from x32 to x64. The type of the integers use din the argument list are defined in mudule ifmt. The type is defined byINT_PTR_KIND. Is this integer kind different between 32 and 64 bit?
THis is the error that our make file spits out.
Line 32: relap\rnewp.for(371): error #6284: There is no matching specific function for this generic function reference. [CREATETHREAD]
Line 44: relap\trnctl.for(46): error #6284: There is no matching specific function for this generic function reference. [CREATETHREAD]
This is the line from rnewp.for that it is complaining about
thhndl = CreateThread(0,0,hynoded,0,0,thrid)
thhndl is defined as:integer(int_ptr_kind()) thhndl,thrid
Are the 0,0 in(0,0,hynoded,0,0,thrid) interprited as 32bit and should be 64bits
0 Kudos
Steven_L_Intel1
Employee
1,507 Views
Yes, the whole reason for creating the INT_PTR_KIND() intrinsic is that it returns different results on 32 and 64-bit platforms.

Here is the declaration of the CreateThread routine in KERNEL32.F90:

FUNCTION CreateThread( &
lpThreadAttributes, &
dwStackSize, &
lpStartAddress, &
lpParameter, &
dwCreationFlags, &
lpThreadId)
import
integer(HANDLE) :: CreateThread ! HANDLE
!DEC$ ATTRIBUTES DEFAULT, STDCALL, DECORATE, ALIAS:'CreateThread' :: CreateThread
!DEC$ ATTRIBUTES REFERENCE, ALLOW_NULL :: lpThreadAttributes
TYPE (T_SECURITY_ATTRIBUTES) lpThreadAttributes ! LPSECURITY_ATTRIBUTES lpThreadAttributes
integer(DWORD) dwStackSize ! DWORD dwStackSize
integer(LPVOID) lpStartAddress ! LPTHREAD_START_ROUTINE lpStartAddress
integer(LPVOID) lpParameter ! LPVOID lpParameter
integer(DWORD) dwCreationFlags ! DWORD dwCreationFlags
integer(LPDWORD) lpThreadId ! LPDWORD lpThreadId

The 0 arguments are not the problem. How is hynoded declared? That's the start address and needs to be a pointer-sized integer. The rest looks ok to me. The compiler will allow 0 for the arguments.
0 Kudos
Brian_A_
Novice
1,507 Views
[bash]relaprnewp.ff
        1 file(s) copied.
	ifort -nologo -c   -auto -Qansi_alias- -pad_source -traceback  -fltconsistency -fpconstant -nogen-interfaces -module:o  -Io -Ienvrl -Imatpro -Irelap -Iscdap  -Igraphics -object:relaprnewp.o relaprnewp.for
relaprnewp.for(313): error #7112: This actual argument must not be the name of a procedure.   [HYNODED]
         thhndl = CreateThread(0,0,hynoded,0,0,thrid)
-----------------------------------^
compilation aborted for relaprnewp.for (code 1)
Could Not Find D:iss_relapRELAP5Mod35rs35da.intl64relaptrnctl.o
auxxdefinei
relaptrnctl.ff
        1 file(s) copied.
	ifort -nologo -c   -auto -Qansi_alias- -pad_source -traceback  -fltconsistency -fpconstant -nogen-interfaces -module:o  -Io -Ienvrl -Imatpro -Irelap -Iscdap  -Igraphics -object:relaptrnctl.o relaptrnctl.for
relaptrnctl.for(48): error #7112: This actual argument must not be the name of a procedure.   [HYNODED]
           thhndl = CreateThread(0,0,hynoded,1,0,thrid)
-------------------------------------^[/bash]
We changed "use ifmt" to use kernel32" and this is what we are getting now.
I have attached the hynoded file and in the two routines that call it we have hynoded set as external.
0 Kudos
Steven_L_Intel1
Employee
1,507 Views
CreateThread wants a pointer-sized integer containing the start address, so pass LOC(hynoded).
0 Kudos
Reply