]> granicus.if.org Git - clang/commitdiff
[frontend] Fix how the frontend handles -fno-inline. AFAIK clang now matches
authorChad Rosier <mcrosier@apple.com>
Thu, 15 Mar 2012 22:31:42 +0000 (22:31 +0000)
committerChad Rosier <mcrosier@apple.com>
Thu, 15 Mar 2012 22:31:42 +0000 (22:31 +0000)
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

include/clang/Driver/CC1Options.td
include/clang/Driver/Options.td
include/clang/Frontend/CodeGenOptions.h
lib/Driver/Tools.cpp
lib/Frontend/CompilerInvocation.cpp
test/CodeGen/noinline.c
test/Driver/noinline.c

index d32ea0b9e03c91a2ee258fe268eb357b5266cf07..d0eaf2ba7d95994bc485d35fd7413eda3eaa013e 100644 (file)
@@ -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">,
index a07a4c230de20e2cd62d60b3b0de5a5108c9d634..9765b51bb3e2ee7099384cc7aa4719d5a4841c75 100644 (file)
@@ -420,7 +420,7 @@ def fno_eliminate_unused_debug_symbols : Flag<"-fno-eliminate-unused-debug-symbo
 def fno_exceptions : Flag<"-fno-exceptions">, Group<f_Group>;
 def fno_gnu_keywords : Flag<"-fno-gnu-keywords">, Group<f_Group>;
 def fno_inline_functions : Flag<"-fno-inline-functions">, Group<f_Group>;
-def fno_inline : Flag<"-fno-inline">, Group<clang_ignored_f_Group>;
+def fno_inline : Flag<"-fno-inline">, Group<f_Group>;
 def fno_keep_inline_functions : Flag<"-fno-keep-inline-functions">, Group<clang_ignored_f_Group>;
 def fno_lax_vector_conversions : Flag<"-fno-lax-vector-conversions">, Group<f_Group>;
 def fno_limit_debug_info : Flag<"-fno-limit-debug-info">, Group<f_Group>,
index 46c0c1e1c71b0165d67a542f8ae7736a86370319..59509331a0407897b832b3a07239b3a63a25f0ce 100644 (file)
@@ -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.
index 536897f8792a85317f2d8a98e222b422bfdd11d2..52ba4899fa587c0108df8727e7b02114e87896b6 100644 (file)
@@ -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");
 
index ffc1276f5a6638c147873ec9f153b4c254985101..06dbd18bbbd25445e17695abfcbf392ae5ca97b1 100644 (file)
@@ -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);
 
index 45768815ab950402acc601dcb5729bfb53981768..e64a1a539f4b4d3289d65b7571c0ba396a49b575 100644 (file)
@@ -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); }
 
index 9744b2c13f7a382b29da1cf77f0d0d5510e762df..e665b2f0aa247125518472979148323b481387dd 100644 (file)
@@ -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"