1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // UNSUPPORTED: no-exceptions 10 11 // This test checks that the compiler does not make incorrect assumptions 12 // about the alignment of the exception (only in that specific case, of 13 // course). 14 // 15 // There was a bug where Clang would emit a call to memset assuming a 16-byte 16 // aligned exception even when back-deploying to older Darwin systems where 17 // exceptions are 8-byte aligned, which caused a segfault on those systems. 18 19 struct exception { 20 exception() : x(0) { } 21 virtual ~exception() { } 22 int x; 23 }; 24 25 struct foo : exception { }; 26 27 int main() { 28 try { 29 throw foo(); 30 } catch (...) { 31 32 } 33 return 0; 34 } 35