Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
307 Views

Internal Error

Hi,

The intel compiler generates this:

../simd/avx.hpp(50): internal error: assertion failed at: "shared/cfe/edgcpfe/decls.c", line 9448

      static constexpr unary_value initialize = _mm256_set1_pd;

Here's how I generated the attached preprocessed file:

/compilers/intel/composer_xe_2019.3.199/compilers_and_libraries/linux/bin/intel64/icpc  -std=c++14 -mavx2  -o junk.pp -c junk.cpp -E

Can someone try to reproduce this on Linux?

0 Kudos
7 Replies
Highlighted
Moderator
307 Views

Hi,

The error is reproducible on Linux. Apparently, from the error log, line number 3 of junk.cpp is triggering the error.

Do you mind sharing the minimal reproducible source code, so as to try and understand the root cause of the error?

 

--Rahul

0 Kudos
Highlighted
Beginner
307 Views

Please see the attached files, you should be able to reproduce the problem with:

 icpc -std=c++17 -mavx2  -c junk.cpp -I.

 

0 Kudos
Highlighted
Beginner
307 Views

Ignore previous attachment, those are the wrong files, 

0 Kudos
Highlighted
Beginner
307 Views

Note that I get the same error on the Mac with intel 19.

avx.hpp(69): internal error: assertion failed at: "shared/cfe/edgcpfe/decls.c", line 9486

 

0 Kudos
Highlighted
Moderator
307 Views

Hi Noel,

Looks like a bug to me. Thanks for reporting this and providing sample codes, preprocessed files.

I will escalate this issue to the concerned team.

 

Regards,

Rahul

0 Kudos
Highlighted
307 Views

Thanks for the bug report. You can work around this compiler bug by providing a wrapper function around the intrinsic function. For example, add this function

#include <immintrin.h> 
__m256d wrap_mm256_set1_pd (double d) {   
  return _mm256_set1_pd(d); 
}

And instead of referring to the intrinsic within the template, use the wrapper function's name,

static constexpr unary_value initialize = wrap_mm256_set1_pd;

Hope this helps. --Melanie

0 Kudos
Highlighted
307 Views

Here is another workaround that doesn't require you to modify your source code, you can #define this symbol or put it into the compiler flags

icpc -c -D__INTEL_COMPILER_USE_INTRINSIC_PROTOTYPES=1 test.cpp

0 Kudos