[PATCH] D83397: [flang] Replace uses of _Complex with std::complex

David Truby via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 9 02:02:07 PDT 2020


DavidTruby added a comment.

I would actually say this is more serious than just a warning (although clang only has it as a warning for various reasons). 
_Complex is //**not a keyword that exists in C++**//, so this code is non-conformant. It also isn't implemented in MSVC which is a compiler we should try to support as the rest of LLVM does.
It's also just less ergonomic to use than `std::complex` and they are guaranteed to be layout compatible, so if we need to call into/out of C the following still works:

  // file.cpp
  #include <complex>
  extern "C" float real_part(std::complex<float> c) {
    return c.real();
  }
  
  // file.c
  #include <stdio.h>
  #include <complex.h>
  extern float real_part(float _Complex c);
  
  int main()
  {
    float _Complex c = 1+2*I;
    printf("%f\n", real_part(c));
  }

This isn't accidental; the C++ standard guarantees that this works.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83397/new/

https://reviews.llvm.org/D83397





More information about the llvm-commits mailing list