brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1005 B · da115fe Raw
56 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_trampoline_setup3 4#include <stdio.h>5#include <string.h>6#include <stdint.h>7 8/*9 * Tests nested functions10 * The ppc compiler generates a call to __trampoline_setup11 * The i386 and x86_64 compilers generate a call to ___enable_execute_stack12 */13 14/*15 * Note that, nested functions are not ISO C and are not supported in Clang.16 */17 18#if !defined(__clang__)19 20typedef int (*nested_func_t)(int x);21 22nested_func_t proc;23 24int main() {25    /* Some locals */26    int c = 10;27    int d = 7;28    29    /* Define a nested function: */30    int bar(int x) { return x*5 + c*d; };31 32    /* Assign global to point to nested function33     * (really points to trampoline). */34    proc = bar;35    36    /* Invoke nested function: */37    c = 4;38    if ( (*proc)(3) != 43 )39        return 1;40    d = 5;41    if ( (*proc)(4) != 40 )42        return 1;43 44    /* Success. */45    return 0;46}47 48#else49 50int main() {51    printf("skipped\n");52    return 0;53}54 55#endif56