aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorXi Ruoyao <xry111@xry111.site>2024-02-02 05:37:38 +0800
committerXi Ruoyao <xry111@xry111.site>2024-02-03 18:28:15 +0800
commit854b8555bd49ad97c336b8df7098e725dc196e4f (patch)
tree0098069ad61c9392ee784b322ba34cc3a1298062 /gcc
parent1149588836ed426c6ac44a6c200f60a75dfea11d (diff)
downloadgcc-854b8555bd49ad97c336b8df7098e725dc196e4f.zip
gcc-854b8555bd49ad97c336b8df7098e725dc196e4f.tar.gz
gcc-854b8555bd49ad97c336b8df7098e725dc196e4f.tar.bz2
LoongArch: Fix an ODR violation
When bootstrapping GCC 14 with --with-build-config=bootstrap-lto, an ODR violation is detected: ../../gcc/config/loongarch/loongarch-opts.cc:57: warning: 'abi_minimal_isa' violates the C++ One Definition Rule [-Wodr] 57 | abi_minimal_isa[N_ABI_BASE_TYPES][N_ABI_EXT_TYPES]; ../../gcc/config/loongarch/loongarch-def.cc:186: note: 'abi_minimal_isa' was previously declared here 186 | abi_minimal_isa = array<array<loongarch_isa, N_ABI_EXT_TYPES>, ../../gcc/config/loongarch/loongarch-def.cc:186: note: code may be misoptimized unless '-fno-strict-aliasing' is used Fix it by adding a proper declaration of abi_minimal_isa into loongarch-def.h and remove the ODR-violating local declaration in loongarch-opts.cc. gcc/ChangeLog: * config/loongarch/loongarch-def.h (abi_minimal_isa): Declare. * config/loongarch/loongarch-opts.cc (abi_minimal_isa): Remove the ODR-violating locale declaration.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/loongarch/loongarch-def.h3
-rw-r--r--gcc/config/loongarch/loongarch-opts.cc2
2 files changed, 3 insertions, 2 deletions
diff --git a/gcc/config/loongarch/loongarch-def.h b/gcc/config/loongarch/loongarch-def.h
index a1237ec..2dbf006 100644
--- a/gcc/config/loongarch/loongarch-def.h
+++ b/gcc/config/loongarch/loongarch-def.h
@@ -203,5 +203,8 @@ extern loongarch_def_array<loongarch_align, N_TUNE_TYPES>
loongarch_cpu_align;
extern loongarch_def_array<loongarch_rtx_cost_data, N_TUNE_TYPES>
loongarch_cpu_rtx_cost_data;
+extern loongarch_def_array<
+ loongarch_def_array<loongarch_isa, N_ABI_EXT_TYPES>,
+ N_ABI_BASE_TYPES> abi_minimal_isa;
#endif /* LOONGARCH_DEF_H */
diff --git a/gcc/config/loongarch/loongarch-opts.cc b/gcc/config/loongarch/loongarch-opts.cc
index b872995..7eeac43 100644
--- a/gcc/config/loongarch/loongarch-opts.cc
+++ b/gcc/config/loongarch/loongarch-opts.cc
@@ -53,8 +53,6 @@ static const int tm_multilib_list[] = { TM_MULTILIB_LIST };
static int enabled_abi_types[N_ABI_BASE_TYPES][N_ABI_EXT_TYPES] = { 0 };
#define isa_required(ABI) (abi_minimal_isa[(ABI).base][(ABI).ext])
-extern "C" const struct loongarch_isa
-abi_minimal_isa[N_ABI_BASE_TYPES][N_ABI_EXT_TYPES];
static inline int
is_multilib_enabled (struct loongarch_abi abi)