22#include "gdbsupport/selftest.h"
23#include "gdbsupport/gdb_regex.h"
48 if (producer != NULL && startswith (producer,
"GNU "))
63 cs = &producer[strlen (
"GNU ")];
64 while (*cs && !isspace (*cs))
66 if (*cs && isspace (*cs))
68 if (sscanf (cs,
"%d.%d", major, minor) == 2)
94 compiled_regex i_re (
"Intel(R)", 0,
"producer_is_icc");
95 if (producer ==
nullptr || i_re.exec (producer, 0,
nullptr, 0) != 0)
100 if (major ==
nullptr)
102 if (minor ==
nullptr)
108 compiled_regex re (
"[0-9]+\\.[0-9]+", REG_EXTENDED,
"producer_is_icc");
113 const char *version_str = producer +
version[0].rm_so;
114 sscanf (version_str,
"%d.%d", major, minor);
126 return ((producer != NULL) && (startswith (producer,
"clang ")
127 || startswith (producer,
" F90 Flang ")));
135 if (producer !=
nullptr && startswith (producer,
"clang version "))
138 if (major ==
nullptr)
140 if (minor ==
nullptr)
146 const char *cs = producer + strlen (
"clang version ");
148 if (sscanf (cs,
"%d.%d", major, minor) == 2)
154#if defined GDB_SELF_TEST
159producer_parsing_tests ()
164 static const char icc_no_version[] =
"Intel(R) foo bar";
166 int major = 0, minor = 0;
172 static const char extern_f_14_0[] =
"\
173Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on \
175Version 14.0.1.074 Build 20130716";
177 int major = 0, minor = 0;
179 && major == 14 && minor == 0);
184 static const char intern_f_14[] =
"\
185Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on \
189 int major = 0, minor = 0;
191 && major == 14 && minor == 0);
196 static const char intern_c_14[] =
"\
197Intel(R) C++ Intel(R) 64 Compiler XE for applications running on \
200 int major = 0, minor = 0;
202 && major == 14 && minor == 0);
207 static const char intern_c_18[] =
"\
208Intel(R) C++ Intel(R) 64 Compiler for applications running on \
211 int major = 0, minor = 0;
213 && major == 18 && minor == 0);
217 static const char gnu[] =
"GNU C 4.7.2";
220 int major = 0, minor = 0;
222 && major == 4 && minor == 7);
226 static const char gnu_exp[] =
"GNU C++14 5.0.0 20150123 (experimental)";
227 int major = 0, minor = 0;
230 && major == 5 && minor == 0);
234 static const char clang_llvm_exp[] =
"clang version 12.0.0 (CLANG: bld#8)";
235 int major = 0, minor = 0;
242 static const char flang_llvm_exp[] =
" F90 Flang - 1.5 2017-05-01";
243 int major = 0, minor = 0;
257#if defined GDB_SELF_TEST
258 selftests::register_test
259 (
"producer-parser", selftests::producer::producer_parsing_tests);
int producer_is_gcc(const char *producer, int *major, int *minor)
bool producer_is_icc(const char *producer, int *major, int *minor)
void _initialize_producer()
int producer_is_gcc_ge_4(const char *producer)
bool producer_is_llvm(const char *producer)
bool producer_is_clang(const char *producer, int *major, int *minor)
bool producer_is_icc_ge_19(const char *producer)
static bool producer_is_icc(struct dwarf2_cu *cu)