Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29234 Discussions

Linking errors when using memory sanitizer in fortran project

ogmundur
Novice
4,016 Views

When I use the check uninit option in a large, mixed language (fortran and C) project with the new ifx driver I get a huge amount of the following linking errors:

 

undefined reference to `__msan_chain_origin'

 

with references to numerous other routines from the memory sanitizer all beginning with __msan. If I turn the uninit check off, the project compiles and links successfully.

I am using ifx version 2023.2.0. I am using CMake, which automatically selects ifx to link the executable.

Should I be passing further options to the linker, so that it finds the memory sanitzer routines?

1 Solution
Barbara_P_Intel
Employee
3,997 Views

When you compile with -check uninit (or -check all) you also need to link with that compiler option.

 

View solution in original post

6 Replies
Barbara_P_Intel
Employee
3,998 Views

When you compile with -check uninit (or -check all) you also need to link with that compiler option.

 

ogmundur
Novice
3,955 Views
0 Kudos
dkokron_wcoss2
Beginner
1,521 Views

What are my options for a mixed language (fortran and c++) application where some fortran code is compiled (ifx) with "-check uninit" but the application is linked with icpx (which does not recognize the -check option )?  I'm on Linux using OneAPI-2024.2.1.

0 Kudos
Mark_Lewy
Valued Contributor I
1,226 Views

Use "-fsanitize=memory" when compiling C/C++ to be used with "-check uninit" from ifx.

0 Kudos
jimdempseyatthecove
Honored Contributor III
917 Views

If your C++ code is the main of the program, then remember to insert early into your main(...) 

int argc;
char **argv;
void for_rtl_init_ (int *, char **);
for_rtl_init_ (&argc, argv);

And at the end of the program

int io_status;
int for_rtl_finish_ ( );
io_status = for_rtl_finish_ ( );

It is probably best practice in C++ to make a class or struct with the ctor doing the init and the dtor doing the finish.

Jim Dempsey

0 Kudos
dkokron_wcoss2
Beginner
1,163 Views

Mark,

I will try that and report results back here.

Dan

0 Kudos
Reply