From 285f88d4a3b99dcfef3d5c00eb0db50127ac27e3 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Mon, 24 Apr 2017 18:41:00 +0000 Subject: [PATCH] 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. llvm-svn: 301218 --- clang/lib/Lex/Pragma.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clang/lib/Lex/Pragma.cpp b/clang/lib/Lex/Pragma.cpp index f81eaa31e9e9..87e105d1d03d 100644 --- a/clang/lib/Lex/Pragma.cpp +++ b/clang/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)