Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.

Possible case for a warning in the compiler?

Ioannis_E__Venetis
412 Views

Hello everyone,

While I was making several changes in my code, I came across a case when using pragmas, that I managed to reduce to the following very simple testcase, contained in the file phitest.c:

#include <stdio.h>

int main()
{
        int     i, a = 0;

#if 0
#pragma offload target(mic) inout(a) \
#else
#pragma offload target(mic) inout(a)
#endif
#pragma omp parallel for
        for (i = 0; i < 100000000; i++) {
                #pragma omp atomic
                a++;
        }

        printf("a = %d\n", a);

        return(0);
}

I compile the code using icc 14.0.2 with:

icc -O3 -fopenmp -o phitest phitest.c

Notice the backslash at the end of the first pragma. This program compiles without a problem, but it executes on the CPU. Technically speaking, this is the correct behavior. With the backslash, the "#else" goes with the previous line, so the two offload pragmas are actually inside the "#if 0". Of course, if I delete the backslash the program behaves as expected.

However, it took me several hours to find this error. The offload pragmas in my case were very long and the backslash was not visible until I scrolled to the end of the line. Maybe a lesson for me to turn on line breaking in my editor :-) Although I still haven't found a good way to parallelize my application for the Phi, this made me scratch my head for hours trying to figure out why the code is not executed on the Phi at all.

You think some warning message would be appropriate in this case or not? What is your opinion?

Ioannis E. Venetis

0 Kudos
8 Replies
SergeyKostrov
Valued Contributor II
412 Views
>>...You think some warning message would be appropriate in this case or not? What is your opinion? When creating a single-line macro(s) there is a very simple rule: do not use the backslash at the end. I agree that a warning message, or a remark, could help a developer to catch such cases.
0 Kudos
jimdempseyatthecove
Honored Contributor III
412 Views

The compiler did what you asked it to do.

I think though the compile should have an option -Lint to perform a "Lint" operation to catch questionable statements.

Jim Dempsey

0 Kudos
Om_S_Intel
Employee
412 Views

I tried gcc -Wall but I do not get any warning,

0 Kudos
SergeyKostrov
Valued Contributor II
412 Views
>>>>... >>>>I compile the code using icc 14.0.2 with: >>>> >>>>icc -O3 -fopenmp -o phitest phitest.c >>>>... >> >>I tried gcc -Wall but I do not get any warning Did you try command line options from the 1st post?
0 Kudos
KitturGanesh
Employee
412 Views

I agree with Om don't get any warning with GCC as well as with ICC as it executed what's asked for (valid code!)

%gcc --version
%gcc (GCC) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
...
%gcc -O3 -fopenmp -o phitest phitest.c
%

I agree, it would be good if compiler can catch questionable syntax and issue a warning/remark depending on the context.

_Kittur

0 Kudos
KitturGanesh
Employee
412 Views

Hi Ioannis, 

I"ve filed this issue as a feature request with the developers to see if any warning/remark can be output in such a context and will keep you updated accordingly

_Kittur

0 Kudos
Ioannis_E__Venetis
412 Views

Dear all,

Thank you for taking the time to investigate this. I appreciate it and I hope that the development team will come up with a nice solution.

Best regards,

Ioannis

0 Kudos
KitturGanesh
Employee
412 Views

Hi Ioannis,

Well, I heard back from the developers that for the compiler to issue a remark it needs to know the exact intent on which to issue a remark. That is, about the user's code that makes it likely to be unintentional than intentional. Additionally, adding a backslash without realizing it is a common mistake for users. That said, the issue I filed was closed as not a defect and not possible to add a remark for code that's perfectly valid. Let me know if you need any further clarifications. Appreciate your patience through this.
_Kittur

0 Kudos
Reply