]> granicus.if.org Git - clang/commitdiff
[Frontend] Disable value name discarding for all sanitizers.
authorBenjamin Kramer <benny.kra@googlemail.com>
Mon, 14 Mar 2016 13:23:58 +0000 (13:23 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Mon, 14 Mar 2016 13:23:58 +0000 (13:23 +0000)
ASan also relies on names on allocas and will emit unhelpful output if
they're not present. Just force-enable value names for now. Should
unbreak release builds of asan.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@263429 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/CompilerInvocation.cpp

index 980a685a150c47866361da358880c526b8fd256c..df32ca3e0f128b26d8fb2b619bcf91a5e24fb3c7 100644 (file)
@@ -541,6 +541,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
   Opts.DisableFPElim =
       (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg));
   Opts.DisableFree = Args.hasArg(OPT_disable_free);
+  Opts.DiscardValueNames = Args.hasArg(OPT_discard_value_names);
   Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls);
   Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi);
   if (Arg *A = Args.getLastArg(OPT_meabi)) {
@@ -793,12 +794,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
   Opts.CudaGpuBinaryFileNames =
       Args.getAllArgValues(OPT_fcuda_include_gpubinary);
 
-  // DiscardValueNames is set here so that it can depend (perhaps temporarily)
-  // on other options.
-  // We check SanitizeMemoryTrackOrigins here because the backend pass depends
-  // on the name of the alloca in order to print out names.
-  Opts.DiscardValueNames =
-      Args.hasArg(OPT_discard_value_names) && !Opts.SanitizeMemoryTrackOrigins;
   return Success;
 }
 
@@ -2158,6 +2153,12 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
     if (Res.getFrontendOpts().ProgramAction == frontend::RewriteObjC)
       Res.getLangOpts()->ObjCExceptions = 1;
   }
+
+  // FIXME: Override value name discarding when sanitizers are used because the
+  // backend passes depend on the name of the alloca in order to print out
+  // names.
+  Res.getCodeGenOpts().DiscardValueNames &= Res.getLangOpts()->Sanitize.empty();
+
   // FIXME: ParsePreprocessorArgs uses the FileManager to read the contents of
   // PCH file and find the original header name. Remove the need to do that in
   // ParsePreprocessorArgs and remove the FileManager