From a4d2774c9c1e213cb129c8b81a591297669838c8 Mon Sep 17 00:00:00 2001 From: Matthew Malcomson Date: Thu, 9 Apr 2020 16:11:09 +0100 Subject: [PATCH] [Arm] Allow the use of arm_cde.h for C++ arm_cde.h includes the arm_mve_types.h header, which declares some C++ overloaded functions. There is a superfluous `extern "C"` statement in arm_cde.h, which encompasses these functions. This means that if compiling for C++, the overloaded functions are declared, but are declared without name mangling. Hence all the function names are the same and we have many conflicting declarations. Testing Done: Regression tested for arm-none-eabi. gcc/ChangeLog: 2020-04-09 Matthew Malcomson * config/arm/arm_cde.h: Remove `extern "C"` when compiling for C++. gcc/testsuite/ChangeLog: 2020-04-09 Matthew Malcomson * g++.target/arm/cde_mve.C: New test. --- gcc/ChangeLog | 5 +++++ gcc/config/arm/arm_cde.h | 8 -------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.target/arm/cde_mve.C | 10 ++++++++++ 4 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/g++.target/arm/cde_mve.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 368dfd6094e..d081003609f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2020-04-09 Matthew Malcomson + + * config/arm/arm_cde.h: Remove `extern "C"` when compiling for + C++. + 2020-04-09 Martin Jambor Richard Biener diff --git a/gcc/config/arm/arm_cde.h b/gcc/config/arm/arm_cde.h index d8ddda6bd64..0ba3ee02d05 100644 --- a/gcc/config/arm/arm_cde.h +++ b/gcc/config/arm/arm_cde.h @@ -27,10 +27,6 @@ #ifndef _GCC_ARM_CDE_H #define _GCC_ARM_CDE_H 1 -#ifdef __cplusplus -extern "C" { -#endif - #include #if defined (__ARM_FEATURE_CDE) @@ -177,8 +173,4 @@ extern "C" { #endif -#ifdef __cplusplus -} -#endif - #endif diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5e56c38ffff..d79c4db1aee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2020-04-09 Matthew Malcomson + + * g++.target/arm/cde_mve.C: New test. + 2020-04-09 Christophe Lyon * gcc.target/arm/cmse/cmse-15.c: Use check-function-bodies. diff --git a/gcc/testsuite/g++.target/arm/cde_mve.C b/gcc/testsuite/g++.target/arm/cde_mve.C new file mode 100644 index 00000000000..897cbd2b811 --- /dev/null +++ b/gcc/testsuite/g++.target/arm/cde_mve.C @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_v8_1m_main_cde_mve_fp_ok } */ +/* { dg-add-options arm_v8_1m_main_cde_mve_fp } */ + +/* Ensure this compiles. */ +#include "arm_cde.h" +int foo () +{ + return 1; +} -- 2.30.2