From: Matthias Braun Date: Mon, 24 Apr 2017 18:41:00 +0000 (+0000) Subject: Pragma: Fix DebugOverflowStack() resulting in endless loop. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2987ebbf305f2209d4a40e3f0b2c9fe2e014df3a;p=clang Pragma: Fix DebugOverflowStack() resulting in endless loop. Drive-by fix (noticed while working on https://reviews.llvm.org/D32205): DebugOverflowStack() is supposed to provoke a stack overflow, however LLVM was smart enough to use the red-zone and fold the load into a tail jump on x86_64 optimizing this to an endless loop instead of a stack overflow. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@301218 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Lex/Pragma.cpp b/lib/Lex/Pragma.cpp index f81eaa31e9..87e105d1d0 100644 --- a/lib/Lex/Pragma.cpp +++ b/lib/Lex/Pragma.cpp @@ -989,9 +989,9 @@ struct PragmaDebugHandler : public PragmaHandler { #ifdef _MSC_VER #pragma warning(disable : 4717) #endif - static void DebugOverflowStack() { - void (*volatile Self)() = DebugOverflowStack; - Self(); + static void DebugOverflowStack(void (*P)() = nullptr) { + void (*volatile Self)(void(*P)()) = DebugOverflowStack; + Self(reinterpret_cast(Self)); } #ifdef _MSC_VER #pragma warning(default : 4717)