| // RUN: %clang_builtins %s %librt -fnested-functions -o %t && %run %t |
| /* ===-- trampoline_setup_test.c - Test __trampoline_setup -----------------=== |
| * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| * See https://llvm.org/LICENSE.txt for license information. |
| * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| * ===----------------------------------------------------------------------=== |
| * The ppc compiler generates a call to __trampoline_setup |
| * The i386 and x86_64 compilers generate a call to ___enable_execute_stack |
| * Note that, nested functions are not ISO C and are not supported in Clang. |
| typedef int (*nested_func_t)(int x); |
| /* Define a nested function: */ |
| int bar(int x) { return x*5 + c*d; }; |
| /* Assign global to point to nested function |
| * (really points to trampoline). */ |
| /* Invoke nested function: */ |