Forwarding to cfe-commits as I don't think I saw it appear there.

> dyung created this revision.
> 
> On the PS4, the default C standard is C99 which differs from the
> current default of C11. This patch makes the default C99 when targeting
> the PS4.
> 
> http://reviews.llvm.org/D18708
> 
> Files:
>   include/clang/Frontend/CompilerInvocation.h
>   lib/Frontend/CompilerInvocation.cpp
>   test/Driver/ps4-cpu-defaults.cpp
>   test/Driver/ps4-misc-defaults.cpp
> 
> Index: test/Driver/ps4-misc-defaults.cpp
> ===================================================================
> --- test/Driver/ps4-misc-defaults.cpp
> +++ test/Driver/ps4-misc-defaults.cpp
> @@ -4,3 +4,7 @@
>  // RUN: %clang -target x86_64-scei-ps4 -c %s -### 2>&1 | FileCheck %s
> // CHECK: "-target-cpu" "btver2"
>  // CHECK-NOT: exceptions
> +
> +// Check that the PS4 defaults to C99 when compiling C files // RUN:
> +%clang -target x86_64-scei-ps4 -E -x c -dM %s | FileCheck
> +-check-prefix=CHECK-CSTD %s // CHECK-CSTD: __STDC_VERSION__ 199901L
> Index: test/Driver/ps4-cpu-defaults.cpp
> ===================================================================
> --- test/Driver/ps4-cpu-defaults.cpp
> +++ test/Driver/ps4-cpu-defaults.cpp
> @@ -1,6 +0,0 @@
> -// Check that on the PS4 we default to:
> -// -target-cpu btver2 and no exceptions
> -
> -// RUN: %clang -target x86_64-scei-ps4 -c %s -### 2>&1 | FileCheck %s
> -// CHECK: "-target-cpu" "btver2"
> -// CHECK-NOT: exceptions
> Index: lib/Frontend/CompilerInvocation.cpp
> ===================================================================
> --- lib/Frontend/CompilerInvocation.cpp
> +++ lib/Frontend/CompilerInvocation.cpp
> @@ -1355,6 +1355,7 @@
>  }
> 
>  void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind
> IK,
> +                                         const llvm::Triple &T,
>                                           LangStandard::Kind LangStd) {
>    // Set some properties which depend solely on the input kind; it
> would be nice
>    // to move these to the language standard, and have the driver
> resolve the @@ -1387,7 +1388,11 @@
>      case IK_PreprocessedC:
>      case IK_ObjC:
>      case IK_PreprocessedObjC:
> -      LangStd = LangStandard::lang_gnu11;
> +      // The PS4 uses C99 as the default C standard.
> +      if (T.isPS4())
> +        LangStd = LangStandard::lang_gnu99;
> +      else
> +        LangStd = LangStandard::lang_gnu11;
>        break;
>      case IK_CXX:
>      case IK_PreprocessedCXX:
> @@ -1541,7 +1546,8 @@
>        LangStd = OpenCLLangStd;
>    }
> 
> -  CompilerInvocation::setLangDefaults(Opts, IK, LangStd);
> +  llvm::Triple T(TargetOpts.Triple);
> +  CompilerInvocation::setLangDefaults(Opts, IK, T, LangStd);
> 
>    // We abuse '-f[no-]gnu-keywords' to force overriding all GNU-
> extension
>    // keywords. This behavior is provided by GCC's poorly named '-fasm'
> flag, @@ -1858,7 +1864,6 @@
>    // Provide diagnostic when a given target is not expected to be an
> OpenMP
>    // device or host.
>    if (Opts.OpenMP && !Opts.OpenMPIsDevice) {
> -    llvm::Triple T(TargetOpts.Triple);
>      switch (T.getArch()) {
>      default:
>        break;
> Index: include/clang/Frontend/CompilerInvocation.h
> ===================================================================
> --- include/clang/Frontend/CompilerInvocation.h
> +++ include/clang/Frontend/CompilerInvocation.h
> @@ -153,8 +153,10 @@
>    ///
>    /// \param Opts - The LangOptions object to set up.
>    /// \param IK - The input language.
> +  /// \param T - The target triple.
>    /// \param LangStd - The input language standard.
>    static void setLangDefaults(LangOptions &Opts, InputKind IK,
> +                   const llvm::Triple &T,
>                     LangStandard::Kind LangStd =
> LangStandard::lang_unspecified);
> 
>    /// \brief Retrieve a module hash string that is suitable for
> uniquely
> 

Index: test/Driver/ps4-misc-defaults.cpp
===================================================================
--- test/Driver/ps4-misc-defaults.cpp
+++ test/Driver/ps4-misc-defaults.cpp
@@ -4,3 +4,7 @@
 // RUN: %clang -target x86_64-scei-ps4 -c %s -### 2>&1 | FileCheck %s
 // CHECK: "-target-cpu" "btver2"
 // CHECK-NOT: exceptions
+
+// Check that the PS4 defaults to C99 when compiling C files
+// RUN: %clang -target x86_64-scei-ps4 -E -x c -dM %s | FileCheck -check-prefix=CHECK-CSTD %s
+// CHECK-CSTD: __STDC_VERSION__ 199901L
Index: test/Driver/ps4-cpu-defaults.cpp
===================================================================
--- test/Driver/ps4-cpu-defaults.cpp
+++ test/Driver/ps4-cpu-defaults.cpp
@@ -1,6 +0,0 @@
-// Check that on the PS4 we default to:
-// -target-cpu btver2 and no exceptions
-
-// RUN: %clang -target x86_64-scei-ps4 -c %s -### 2>&1 | FileCheck %s
-// CHECK: "-target-cpu" "btver2"
-// CHECK-NOT: exceptions
Index: lib/Frontend/CompilerInvocation.cpp
===================================================================
--- lib/Frontend/CompilerInvocation.cpp
+++ lib/Frontend/CompilerInvocation.cpp
@@ -1355,6 +1355,7 @@
 }
 
 void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK,
+                                         const llvm::Triple &T,
                                          LangStandard::Kind LangStd) {
   // Set some properties which depend solely on the input kind; it would be nice
   // to move these to the language standard, and have the driver resolve the
@@ -1387,7 +1388,11 @@
     case IK_PreprocessedC:
     case IK_ObjC:
     case IK_PreprocessedObjC:
-      LangStd = LangStandard::lang_gnu11;
+      // The PS4 uses C99 as the default C standard.
+      if (T.isPS4())
+        LangStd = LangStandard::lang_gnu99;
+      else
+        LangStd = LangStandard::lang_gnu11;
       break;
     case IK_CXX:
     case IK_PreprocessedCXX:
@@ -1541,7 +1546,8 @@
       LangStd = OpenCLLangStd;
   }
 
-  CompilerInvocation::setLangDefaults(Opts, IK, LangStd);
+  llvm::Triple T(TargetOpts.Triple);
+  CompilerInvocation::setLangDefaults(Opts, IK, T, LangStd);
 
   // We abuse '-f[no-]gnu-keywords' to force overriding all GNU-extension
   // keywords. This behavior is provided by GCC's poorly named '-fasm' flag,
@@ -1858,7 +1864,6 @@
   // Provide diagnostic when a given target is not expected to be an OpenMP
   // device or host.
   if (Opts.OpenMP && !Opts.OpenMPIsDevice) {
-    llvm::Triple T(TargetOpts.Triple);
     switch (T.getArch()) {
     default:
       break;
Index: include/clang/Frontend/CompilerInvocation.h
===================================================================
--- include/clang/Frontend/CompilerInvocation.h
+++ include/clang/Frontend/CompilerInvocation.h
@@ -153,8 +153,10 @@
   ///
   /// \param Opts - The LangOptions object to set up.
   /// \param IK - The input language.
+  /// \param T - The target triple.
   /// \param LangStd - The input language standard.
   static void setLangDefaults(LangOptions &Opts, InputKind IK,
+                   const llvm::Triple &T,
                    LangStandard::Kind LangStd = LangStandard::lang_unspecified);
   
   /// \brief Retrieve a module hash string that is suitable for uniquely 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to