From: Chad Rosier Date: Thu, 15 Mar 2012 22:31:42 +0000 (+0000) Subject: [frontend] Fix how the frontend handles -fno-inline. AFAIK clang now matches X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fc055f943d154c9b7463f43a3b59e093723362c9;p=clang [frontend] Fix how the frontend handles -fno-inline. AFAIK clang now matches the behavior of gcc with respect to the -fno-inline and -fno-inline-functions flags. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152861 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/CC1Options.td b/include/clang/Driver/CC1Options.td index d32ea0b9e0..d0eaf2ba7d 100644 --- a/include/clang/Driver/CC1Options.td +++ b/include/clang/Driver/CC1Options.td @@ -516,6 +516,8 @@ def fgnu_keywords : Flag<"-fgnu-keywords">, HelpText<"Allow GNU-extension keywords regardless of language standard">; def fgnu89_inline : Flag<"-fgnu89-inline">, HelpText<"Use the gnu89 inline semantics">; +def fno_inline : Flag<"-fno-inline">, + HelpText<"Disable use of inline keyword">; def fno_inline_functions : Flag<"-fno-inline-functions">, HelpText<"Disable automatic function inlining">; def fno_gnu_keywords : Flag<"-fno-gnu-keywords">, diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index a07a4c230d..9765b51bb3 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -420,7 +420,7 @@ def fno_eliminate_unused_debug_symbols : Flag<"-fno-eliminate-unused-debug-symbo def fno_exceptions : Flag<"-fno-exceptions">, Group; def fno_gnu_keywords : Flag<"-fno-gnu-keywords">, Group; def fno_inline_functions : Flag<"-fno-inline-functions">, Group; -def fno_inline : Flag<"-fno-inline">, Group; +def fno_inline : Flag<"-fno-inline">, Group; def fno_keep_inline_functions : Flag<"-fno-keep-inline-functions">, Group; def fno_lax_vector_conversions : Flag<"-fno-lax-vector-conversions">, Group; def fno_limit_debug_info : Flag<"-fno-limit-debug-info">, Group, diff --git a/include/clang/Frontend/CodeGenOptions.h b/include/clang/Frontend/CodeGenOptions.h index 46c0c1e1c7..59509331a0 100644 --- a/include/clang/Frontend/CodeGenOptions.h +++ b/include/clang/Frontend/CodeGenOptions.h @@ -78,8 +78,8 @@ public: unsigned NoGlobalMerge : 1; /// Set when -mno-global-merge is enabled. unsigned NoImplicitFloat : 1; /// Set when -mno-implicit-float is enabled. unsigned NoInfsFPMath : 1; /// Assume FP arguments, results not +-Inf. - unsigned NoInline : 1; /// Set when -fno-inline-functions is enabled. - /// Disables use of inline keyword. + unsigned NoInline : 1; /// Set when -fno-inline is enabled. Disables + /// use of the inline keyword. unsigned NoNaNsFPMath : 1; /// Assume FP arguments, results not NaN. unsigned NoZeroInitializedInBSS : 1; /// -fno-zero-initialized-in-bss unsigned ObjCDispatchMethod : 2; /// Method of Objective-C dispatch to use. diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 536897f879..52ba4899fa 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -2173,6 +2173,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, false)) CmdArgs.push_back("-fgnu89-inline"); + if (Args.hasArg(options::OPT_fno_inline)) + CmdArgs.push_back("-fno-inline"); + if (Args.hasArg(options::OPT_fno_inline_functions)) CmdArgs.push_back("-fno-inline-functions"); diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index ffc1276f5a..06dbd18bbb 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -1165,9 +1165,9 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK, Opts.Inlining = (Opts.OptimizationLevel > 1) ? CodeGenOptions::NormalInlining : CodeGenOptions::OnlyAlwaysInlining; // -fno-inline-functions overrides OptimizationLevel > 1. - Opts.NoInline = Args.hasArg(OPT_fno_inline_functions); - Opts.Inlining = Opts.NoInline ? CodeGenOptions::OnlyAlwaysInlining : - Opts.Inlining; + Opts.NoInline = Args.hasArg(OPT_fno_inline); + Opts.Inlining = Args.hasArg(OPT_fno_inline_functions) ? + CodeGenOptions::OnlyAlwaysInlining : Opts.Inlining; Opts.DebugInfo = Args.hasArg(OPT_g); Opts.LimitDebugInfo = !Args.hasArg(OPT_fno_limit_debug_info) @@ -2012,9 +2012,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, // This is the __NO_INLINE__ define, which just depends on things like the // optimization level and -fno-inline, not actually whether the backend has // inlining enabled. - // - // FIXME: This is affected by other options (-fno-inline). - Opts.NoInlineDefine = !Opt; + Opts.NoInlineDefine = !Opt || Args.hasArg(OPT_fno_inline); Opts.FastMath = Args.hasArg(OPT_ffast_math); diff --git a/test/CodeGen/noinline.c b/test/CodeGen/noinline.c index 45768815ab..e64a1a539f 100644 --- a/test/CodeGen/noinline.c +++ b/test/CodeGen/noinline.c @@ -1,7 +1,7 @@ // Make sure -fno-inline-functions is behaving correctly. // rdar://10972766 -// RUN: %clang_cc1 -O3 -fno-inline-functions -emit-llvm %s -o - | FileCheck -check-prefix=NOINLINE %s +// RUN: %clang_cc1 -O3 -fno-inline -fno-inline-functions -emit-llvm %s -o - | FileCheck -check-prefix=NOINLINE %s inline int dont_inline_me(int a, int b) { return(a+b); } diff --git a/test/Driver/noinline.c b/test/Driver/noinline.c index 9744b2c13f..e665b2f0aa 100644 --- a/test/Driver/noinline.c +++ b/test/Driver/noinline.c @@ -2,8 +2,9 @@ // rdar://10972766 // RUN: %clang -target x86_64-apple-darwin10 \ -// RUN: -fno-inline-functions -### -fsyntax-only %s 2> %t +// RUN: -fno-inline -fno-inline-functions -### -fsyntax-only %s 2> %t // RUN: FileCheck --check-prefix=CHECK < %t %s // CHECK: clang +// CHECK: "-fno-inline" // CHECK: "-fno-inline-functions"