Skip to content

Commit b93fc14

Browse files
rovkajeanPerier
authored andcommitted
[flang] Change complex type define in runtime for clang-cl
When compiling the runtime with a version of clang-cl newer than 12, we define CMPLXF as __builtin_complex, which returns a float _Complex type. This errors out in contexts where the result of CMPLXF is expected to be a float_Complex_t. This is defined as _Fcomplex whenever _MSC_VER is defined (and as float _Complex otherwise). This patch defines float_Complex_t & friends as _Fcomplex only when we're using "true" MSVC, and not just clang-pretending-to-be-MSVC. This should only affect clang-cl >= 12. Differential Revision: https://reviews.llvm.org/D110139
1 parent b0b3bd8 commit b93fc14

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

flang/runtime/complex-reduction.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ struct CppComplexLongDouble {
2323
/* Not all environments define CMPLXF, CMPLX, CMPLXL. */
2424

2525
#ifndef CMPLXF
26-
#if __clang_major__ >= 12
26+
#if defined(__clang_major__) && (__clang_major__ >= 12)
2727
#define CMPLXF __builtin_complex
2828
#else
2929
static float_Complex_t CMPLXF(float r, float i) {
@@ -39,7 +39,7 @@ static float_Complex_t CMPLXF(float r, float i) {
3939
#endif
4040

4141
#ifndef CMPLX
42-
#if __clang_major__ >= 12
42+
#if defined(__clang_major__) && (__clang_major__ >= 12)
4343
#define CMPLX __builtin_complex
4444
#else
4545
static double_Complex_t CMPLX(double r, double i) {
@@ -55,7 +55,7 @@ static double_Complex_t CMPLX(double r, double i) {
5555
#endif
5656

5757
#ifndef CMPLXL
58-
#if __clang_major__ >= 12
58+
#if defined(__clang_major__) && (__clang_major__ >= 12)
5959
#define CMPLXL __builtin_complex
6060
#else
6161
static long_double_Complex_t CMPLXL(long double r, long double i) {

flang/runtime/complex-reduction.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
struct CppDescriptor; /* dummy type name for Fortran::runtime::Descriptor */
2222

23-
#ifdef _MSC_VER
23+
#if defined(_MSC_VER) && !(defined(__clang_major__) && __clang_major__ >= 12)
2424
typedef _Fcomplex float_Complex_t;
2525
typedef _Dcomplex double_Complex_t;
2626
typedef _Lcomplex long_double_Complex_t;

0 commit comments

Comments
 (0)