Software Archive
Read-only legacy content
17061 Discussions

Compiler bug with target attribute in icc 14

Apo1
Beginner
667 Views

Hi there,

I'll just let the code and output speak for itself:

// broken
#define DECLARE_OFFLOADED __attribute__ ((target (mic)))

// working
//#define DECLARE_OFFLOADED 

typedef void   (init_t)          (void);
typedef void   (args_t)          (void);
typedef void   (start_t)         (void);
typedef void   (eval_all_t)      (void);
typedef void   (eval_comp_t)     (void);
typedef void   (eval_rng_t)      (void);
typedef void   (init_solution_t) (void);
typedef void   (jeval_t)         (void);

DECLARE_OFFLOADED init_t             init;
DECLARE_OFFLOADED args_t             args;
DECLARE_OFFLOADED start_t            start;
DECLARE_OFFLOADED eval_all_t         eval_all;
DECLARE_OFFLOADED eval_comp_t        eval_comp;
DECLARE_OFFLOADED eval_rng_t         eval_rng;
DECLARE_OFFLOADED init_solution_t    init_solution;
DECLARE_OFFLOADED jeval_t            jeval;

int main(int argc, char **argv) {
        return 0;
}

Compiling this with icc code.c results in several compiler errors:

stochs@pool15:~/src/broken> icc  e2l.cc 
e2l.cc(19): error: identifier "eval_all_t" is undefined
  DECLARE_OFFLOADED eval_all_t         eval_all;
                    ^

e2l.cc(21): error: identifier "eval_rng_t" is undefined
  DECLARE_OFFLOADED eval_rng_t         eval_rng;
                    ^

compilation aborted for e2l.cc (code 2)

... which change if you move the function declarations around, or rename them (or the typedefs).

Compiler version: Intel(R) C Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.1.106 Build 20131008

Can anybody else confirm this? How do you suggest I proceed?

Thanks!

--Apo

0 Kudos
3 Replies
Kevin_D_Intel
Employee
667 Views

This is an interesting issue. I do not know what causes the compiler errors yet and submitted this to Development (see internal tracking id below) for further investigation/repair.

In the meantime, declaring them using the offload_attribute appears to work:

#pragma offload_attribute(push, target(mic))
init_t             init;
args_t             args;
start_t            start;
eval_all_t         eval_all;
eval_comp_t        eval_comp;
eval_rng_t         eval_rng;
init_solution_t    init_solution;
jeval_t            jeval;
#pragma offload_attribute(pop)

(Internal tracking id: DPD200358208)

0 Kudos
Manoj_K_1
Beginner
667 Views

compiler may be undefined

 

0 Kudos
Manoj_K_1
Beginner
667 Views

may i know the purpose of this program?

 

0 Kudos
Reply