Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29235 Обсуждение

INTEGER PARAMETER initialized with BOZ literal retains its BOZ literal status

jwmwalrus
Новый участник I
1 260Просмотр.

Hi.

The latest IFX seems to allow initialization of INTEGER PARAMETERs with BOZ literals, but further usage does not interpret such parameters as INTEGERs.

The following code

use ISO_C_BINDING
implicit none
integer(C_INT), parameter :: IN_CLOSE_WRITE = z'00000008'                       !! Writtable file was closed
integer(C_INT), parameter :: IN_CLOSE_NOWRITE = z'00000010'                     !! Unwrittable file closed
integer(C_INT), parameter :: IN_CLOSE = ior(IN_CLOSE_WRITE, IN_CLOSE_NOWRITE)   !! Close
end

Throws this error

$ ifx -V -stand f2023 -standard-semantics /media/vmshare/ior_boz.f90 
Intel(R) Fortran Compiler for applications running on Intel(R) 64, Version 2025.0.1 Build 20241113
Copyright (C) 1985-2024 Intel Corporation. All rights reserved.

 Intel(R) Fortran 25.0-1205.1
/media/vmshare/ior_boz.f90(5): error #8336: The arguments I and J must not both be boz-literal-constant.   [IOR]
integer(C_INT), parameter :: IN_CLOSE = ior(IN_CLOSE_WRITE, IN_CLOSE_NOWRITE)   !! Close
----------------------------------------^
compilation aborted for /media/vmshare/ior_boz.f90 (code 1)
debian@d

As I understand it, a BOZ literal is untyped, until assigned to an object with a specific type.

So my questions: is the code standard conforming but the feature is not ready yet in IFX?  Or are INTEGER PARAMETERs supposed to propagate its "initialized-through-boz-literal" status?

0 баллов
1 Решение
Ron_Green
Модератор
672Просмотр.
5 Ответы
Steve_Lionel
Почетный участник III
1 228Просмотр.

The code is conforming to F2023, and BOZ status does not "propagate". You've declared the entities as INTEGER, so that's what they are. Intel Fortran has allowed using a BOZ constant to set the value of a PARAMETER for many, many years (as did DEC/Compaq Fortran before it.) This error message is puzzling to me.

jwmwalrus
Новый участник I
1 217Просмотр.

@Steve_Lionel wrote:

Intel Fortran has allowed using a BOZ constant to set the value of a PARAMETER for many, many years...


Yes, I meant to say, "...without a warning when the -stand flag is given", which is the behavior I get with ifort.

Thanks for confirming the code is standard conforming, and that the error is an odd one.

Xiaoping_D_Intel
Сотрудник
1 080Просмотр.

A bug report has been opened. We will fix it in the future product.


Ron_Green
Модератор
673Просмотр.

This issue was fixed in version 2025.2.0

jwmwalrus
Новый участник I
660Просмотр.

Thanks for the notification, @Ron_Green .

This is a huge step in my attempt to migrate from ifort to ifx ---since I have like a million BOZ-literals that were never wrapped in INT(...) (I just suppresed the specific ifort warning).

Ответить