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: 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: 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: 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