r238394 - [Basic] Define __declspec for cygwin

Aaron Ballman aaron at aaronballman.com
Thu May 28 04:35:03 PDT 2015


Thank you, David!

~Aaron

On Thu, May 28, 2015 at 12:36 AM, David Majnemer
<david.majnemer at gmail.com> wrote:
> Author: majnemer
> Date: Wed May 27 23:36:18 2015
> New Revision: 238394
>
> URL: http://llvm.org/viewvc/llvm-project?rev=238394&view=rev
> Log:
> [Basic] Define __declspec for cygwin
>
> Cygwin (and MinGW) targets define __declspec to __attribute__ unless
> -fms-extensions is specified.  It turns out that cygwin headers rely on
> the existence of this macro.
>
> Modified:
>     cfe/trunk/lib/Basic/Targets.cpp
>     cfe/trunk/test/Preprocessor/init.c
>
> Modified: cfe/trunk/lib/Basic/Targets.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=238394&r1=238393&r2=238394&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Basic/Targets.cpp (original)
> +++ cfe/trunk/lib/Basic/Targets.cpp Wed May 27 23:36:18 2015
> @@ -3596,11 +3596,8 @@ public:
>  };
>  } // end anonymous namespace
>
> -static void addMinGWDefines(const LangOptions &Opts, MacroBuilder &Builder) {
> -  Builder.defineMacro("__MSVCRT__");
> -  Builder.defineMacro("__MINGW32__");
> -
> -  // Mingw defines __declspec(a) to __attribute__((a)).  Clang supports
> +static void addCygMingDefines(const LangOptions &Opts, MacroBuilder &Builder) {
> +  // Mingw and cygwin define __declspec(a) to __attribute__((a)).  Clang supports
>    // __declspec natively under -fms-extensions, but we define a no-op __declspec
>    // macro anyway for pre-processor compatibility.
>    if (Opts.MicrosoftExt)
> @@ -3623,6 +3620,12 @@ static void addMinGWDefines(const LangOp
>    }
>  }
>
> +static void addMinGWDefines(const LangOptions &Opts, MacroBuilder &Builder) {
> +  Builder.defineMacro("__MSVCRT__");
> +  Builder.defineMacro("__MINGW32__");
> +  addCygMingDefines(Opts, Builder);
> +}
> +
>  namespace {
>  // x86-32 MinGW target
>  class MinGWX86_32TargetInfo : public WindowsX86_32TargetInfo {
> @@ -3655,6 +3658,7 @@ public:
>      Builder.defineMacro("_X86_");
>      Builder.defineMacro("__CYGWIN__");
>      Builder.defineMacro("__CYGWIN32__");
> +    addCygMingDefines(Opts, Builder);
>      DefineStd(Builder, "unix", Opts);
>      if (Opts.CPlusPlus)
>        Builder.defineMacro("_GNU_SOURCE");
>
> Modified: cfe/trunk/test/Preprocessor/init.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=238394&r1=238393&r2=238394&view=diff
> ==============================================================================
> --- cfe/trunk/test/Preprocessor/init.c (original)
> +++ cfe/trunk/test/Preprocessor/init.c Wed May 27 23:36:18 2015
> @@ -2793,6 +2793,12 @@
>  // RUN: %clang_cc1 -E -dM -ffreestanding -triple=i386-netbsd6 -target-feature +sse2 < /dev/null | FileCheck -check-prefix I386-NETBSD6-SSE %s
>  // I386-NETBSD6-SSE:#define __FLT_EVAL_METHOD__ 1
>
> +// RUN: %clang_cc1 -E -dM -triple=i686-pc-mingw32 < /dev/null | FileCheck -check-prefix I386-DECLSPEC %s
> +// RUN: %clang_cc1 -E -dM -fms-extensions -triple=i686-pc-mingw32 < /dev/null | FileCheck -check-prefix I386-DECLSPEC %s
> +// RUN: %clang_cc1 -E -dM -triple=i686-unknown-cygwin < /dev/null | FileCheck -check-prefix I386-DECLSPEC %s
> +// RUN: %clang_cc1 -E -dM -fms-extensions -triple=i686-unknown-cygwin < /dev/null | FileCheck -check-prefix I386-DECLSPEC %s
> +// I386-DECLSPEC: #define __declspec
> +
>  //
>  // RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips-none-none < /dev/null | FileCheck -check-prefix MIPS32BE %s
>  //
> @@ -8346,6 +8352,10 @@
>  // PS4:#define __x86_64 1
>  // PS4:#define __x86_64__ 1
>  //
> +// RUN: %clang_cc1 -E -dM -triple=x86_64-pc-mingw32 < /dev/null | FileCheck -check-prefix X86-64-DECLSPEC %s
> +// RUN: %clang_cc1 -E -dM -fms-extensions -triple=x86_64-unknown-mingw32 < /dev/null | FileCheck -check-prefix X86-64-DECLSPEC %s
> +// X86-64-DECLSPEC: #define __declspec
> +//
>  // RUN: %clang_cc1 -E -dM -ffreestanding -triple=sparc64-none-none < /dev/null | FileCheck -check-prefix SPARCV9 %s
>  // SPARCV9:#define __INT64_TYPE__ long int
>  // SPARCV9:#define __INTMAX_C_SUFFIX__ L
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list