Should be fixed in r229575. It took me a while to clear up the other unrelated check-asan failures on my system.
On Fri, Feb 6, 2015 at 8:11 AM, Timur Iskhodzhanov <[email protected]> wrote: > ping > > Thu Feb 05 2015 at 4:53:30 PM, Timur Iskhodzhanov <[email protected]>: > > Interesting: this has broken down the dll_noreturn ASan tests (run as part >> of check-asan and check-asan-dynamic), which uses -O0 (yes, o-zero). >> Can you please make sure this doesn't affect -O0? >> >> >> On Thu Feb 05 2015 at 2:52:57 AM Reid Kleckner <[email protected]> wrote: >> >>> Author: rnk >>> Date: Wed Feb 4 17:45:07 2015 >>> New Revision: 228236 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=228236&view=rev >>> Log: >>> Driver: Stop forcing frame pointer usage on Windows >>> >>> Previously, we would use a frame pointer by default on non-Linux OSs. On >>> Linux, any optimization flags imply -fomit-frame-pointer. XCore always >>> defaulted to -fomit-frame-pointer. >>> >>> Now x86 Windows matches our behavior on Linux. All other ISAs supported >>> by Windows (ARM, x64) use xdata information, and frame pointers aren't >>> useful. Frame pointers are now off by default for such targets, but can >>> be forced via -fno-omit-frame-pointer and code using alloca(). >>> >>> In fact, on Win64 our frame-pointer prologue is not describable with >>> UNWIND_INFO. This change is a workaround to avoid using the broken FP >>> using prologue for most functions. This is PR22467. >>> >>> Modified: >>> cfe/trunk/lib/Driver/Tools.cpp >>> >>> Modified: cfe/trunk/lib/Driver/Tools.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Too >>> ls.cpp?rev=228236&r1=228235&r2=228236&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/lib/Driver/Tools.cpp (original) >>> +++ cfe/trunk/lib/Driver/Tools.cpp Wed Feb 4 17:45:07 2015 >>> @@ -2288,27 +2288,49 @@ static bool addSanitizerRuntimes(const T >>> return !StaticRuntimes.empty(); >>> } >>> >>> +static bool areOptimizationsEnabled(const ArgList &Args) { >>> + // Find the last -O arg and see if it is non-zero. >>> + if (Arg *A = Args.getLastArg(options::OPT_O_Group)) >>> + return !A->getOption().matches(options::OPT_O0); >>> + // Defaults to -O0. >>> + return false; >>> +} >>> + >>> static bool shouldUseFramePointerForTarget(const ArgList &Args, >>> const llvm::Triple &Triple) { >>> - switch (Triple.getArch()) { >>> - // Don't use a frame pointer on linux if optimizing for certain >>> targets. >>> - case llvm::Triple::mips64: >>> - case llvm::Triple::mips64el: >>> - case llvm::Triple::mips: >>> - case llvm::Triple::mipsel: >>> - case llvm::Triple::systemz: >>> - case llvm::Triple::x86: >>> - case llvm::Triple::x86_64: >>> - if (Triple.isOSLinux()) >>> - if (Arg *A = Args.getLastArg(options::OPT_O_Group)) >>> - if (!A->getOption().matches(options::OPT_O0)) >>> - return false; >>> - return true; >>> - case llvm::Triple::xcore: >>> + // XCore never wants frame pointers, regardless of OS. >>> + if (Triple.getArch() == llvm::Triple::xcore) { >>> return false; >>> - default: >>> - return true; >>> } >>> + >>> + if (Triple.isOSLinux()) { >>> + switch (Triple.getArch()) { >>> + // Don't use a frame pointer on linux if optimizing for certain >>> targets. >>> + case llvm::Triple::mips64: >>> + case llvm::Triple::mips64el: >>> + case llvm::Triple::mips: >>> + case llvm::Triple::mipsel: >>> + case llvm::Triple::systemz: >>> + case llvm::Triple::x86: >>> + case llvm::Triple::x86_64: >>> + return !areOptimizationsEnabled(Args); >>> + default: >>> + return true; >>> + } >>> + } >>> + >>> + if (Triple.isOSWindows()) { >>> + switch (Triple.getArch()) { >>> + case llvm::Triple::x86: >>> + return !areOptimizationsEnabled(Args); >>> + default: >>> + // All other supported Windows ISAs use xdata unwind information, >>> so frame >>> + // pointers are not generally useful. >>> + return false; >>> + } >>> + } >>> + >>> + return true; >>> } >>> >>> static bool shouldUseFramePointer(const ArgList &Args, >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>> >> > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
