From: Filipe Cabecinhas Date: Fri, 20 Mar 2015 23:51:15 +0000 (+0000) Subject: Only add -fno-rtti if KernelOrKext or in C++ mode. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b690b4e66241785e4ab37b936d100afbda2d27f4;p=clang Only add -fno-rtti if KernelOrKext or in C++ mode. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@232869 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 94c71aca01..0f44ce74b3 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -4050,8 +4050,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, ToolChain::RTTIMode RTTIMode = getToolChain().getRTTIMode(); - if (RTTIMode == ToolChain::RM_DisabledExplicitly || - RTTIMode == ToolChain::RM_DisabledImplicitly) + if (KernelOrKext || (types::isCXX(InputType) && + (RTTIMode == ToolChain::RM_DisabledExplicitly || + RTTIMode == ToolChain::RM_DisabledImplicitly))) CmdArgs.push_back("-fno-rtti"); // -fshort-enums=0 is default for all architectures except Hexagon. diff --git a/test/Driver/rtti-options.cpp b/test/Driver/rtti-options.cpp index 087ee21623..46072ca6ea 100644 --- a/test/Driver/rtti-options.cpp +++ b/test/Driver/rtti-options.cpp @@ -3,10 +3,12 @@ // No warnings/errors should be emitted for unknown, except if combining // the vptr sanitizer with -fno-rtti -// Special case: -fcxx-exceptions in C code should warn about unused arguments -// RUN: %clang -x c -### -c -fcxx-exceptions %s 2>&1 | FileCheck -check-prefix=CHECK-UNUSED %s -// CHECK-UNUSED: warning: argument unused during compilation: '-fcxx-exceptions' +// Special cases: -fcxx-exceptions in C code should warn about unused arguments +// We should also not have any rtti-related arguments +// RUN: %clang -x c -### -target x86_64-scei-ps4 -c -fcxx-exceptions %s 2>&1 | FileCheck -check-prefix=CHECK-UNUSED -check-prefix=CHECK-RTTI -check-prefix=CHECK-NO-RTTI %s +// RUN: %clang -x c -### -target x86_64-unknown-unknown -c -fcxx-exceptions %s 2>&1 | FileCheck -check-prefix=CHECK-UNUSED -check-prefix=CHECK-RTTI -check-prefix=CHECK-NO-RTTI %s +// Make sure we keep the last -frtti/-fno-rtti argument // RUN: %clang -### -c -fno-rtti -frtti %s 2>&1 | FileCheck -check-prefix=CHECK-RTTI %s // RUN: %clang -### -c -frtti -fno-rtti %s 2>&1 | FileCheck -check-prefix=CHECK-NO-RTTI %s @@ -48,6 +50,7 @@ // RUN: %clang -### -c -target x86_64-unknown-unknown -fno-rtti %s 2>&1 | FileCheck -check-prefix=CHECK-NO-RTTI %s // RUN: %clang -### -c -target x86_64-unknown-unknown %s 2>&1 | FileCheck -check-prefix=CHECK-RTTI %s +// CHECK-UNUSED: warning: argument unused during compilation: '-fcxx-exceptions' // CHECK-SAN-WARN: implicitly disabling vptr sanitizer because rtti wasn't enabled // CHECK-SAN-ERROR: invalid argument '-fsanitize=vptr' not allowed with '-fno-rtti' // CHECK-EXC-WARN: implicitly enabling rtti for exception handling