blob: fc70da4d133d49f03deb12f39cf0459f9e5a8264 [file] [log] [blame]
/* Test the fix for PR92123. */
/* Contributed by Vipul Parekh <parekhvs@gmail.com> */
#include <stdlib.h>
#include <stdio.h>
#include <ISO_Fortran_binding.h>
// Prototype for Fortran functions
extern void Fsub(CFI_cdesc_t *);
int main()
{
/* Note: ISO C forbids zero-size array 'dim' [-Wpedantic]
Therefore, even though 'dat' represents a scalar, it is set rank 1/ */
CFI_CDESC_T(1) dat;
int irc = 0;
irc = CFI_establish((CFI_cdesc_t *)&dat, NULL,
CFI_attribute_allocatable,
CFI_type_int, 0, (CFI_rank_t)0, NULL);
if (irc != CFI_SUCCESS)
{
printf("CFI_establish failed: irc = %d.\n", irc);
return EXIT_FAILURE;
}
Fsub((CFI_cdesc_t *)&dat);
if (*(int *)dat.base_addr != 42)
{
printf("Fsub returned = %d.\n", *(int *)dat.base_addr);
return EXIT_FAILURE;
}
irc = CFI_deallocate((CFI_cdesc_t *)&dat);
if (irc != CFI_SUCCESS)
{
printf("CFI_deallocate for dat failed: irc = %d.\n", irc);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}