clang -cc1 -cc1 -triple amd64-unknown-openbsd7.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name conftest.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 1 -pic-is-pie -mframe-pointer=all -relaxed-aliasing -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/src/gnu/lib/libiberty/obj -resource-dir /usr/local/lib/clang/13.0.0 -internal-isystem /usr/local/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -fdebug-compilation-dir=/usr/src/gnu/lib/libiberty/obj -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /home/ben/Projects/vmm/scan-build/2022-01-12-194120-40624-1 -x c conftest.c
| 1 | |
| 2 | |
| 3 | #define PACKAGE_NAME "" |
| 4 | #define PACKAGE_TARNAME "" |
| 5 | #define PACKAGE_VERSION "" |
| 6 | #define PACKAGE_STRING "" |
| 7 | #define PACKAGE_BUGREPORT "" |
| 8 | #define HAVE_SYS_FILE_H 1 |
| 9 | #define HAVE_SYS_PARAM_H 1 |
| 10 | #define HAVE_LIMITS_H 1 |
| 11 | #define HAVE_STDLIB_H 1 |
| 12 | #define HAVE_STRING_H 1 |
| 13 | #define HAVE_UNISTD_H 1 |
| 14 | #define HAVE_STRINGS_H 1 |
| 15 | #define HAVE_SYS_TIME_H 1 |
| 16 | #define HAVE_TIME_H 1 |
| 17 | #define HAVE_SYS_RESOURCE_H 1 |
| 18 | #define HAVE_SYS_STAT_H 1 |
| 19 | #define HAVE_SYS_MMAN_H 1 |
| 20 | #define HAVE_FCNTL_H 1 |
| 21 | #define HAVE_SYS_SYSCTL_H 1 |
| 22 | #define HAVE_STDINT_H 1 |
| 23 | #define HAVE_SYS_WAIT_H 1 |
| 24 | #define TIME_WITH_SYS_TIME 1 |
| 25 | #define STDC_HEADERS 1 |
| 26 | #define HAVE_SYS_TYPES_H 1 |
| 27 | #define HAVE_SYS_STAT_H 1 |
| 28 | #define HAVE_STDLIB_H 1 |
| 29 | #define HAVE_STRING_H 1 |
| 30 | #define HAVE_MEMORY_H 1 |
| 31 | #define HAVE_STRINGS_H 1 |
| 32 | #define HAVE_INTTYPES_H 1 |
| 33 | #define HAVE_STDINT_H 1 |
| 34 | #define HAVE_UNISTD_H 1 |
| 35 | #define SIZEOF_INT 4 |
| 36 | #define UNSIGNED_64BIT_TYPE uint64_t |
| 37 | #define HAVE_UINTPTR_T 1 |
| 38 | #define HAVE_ASPRINTF 1 |
| 39 | #define HAVE_ATEXIT 1 |
| 40 | #define HAVE_BASENAME 1 |
| 41 | #define HAVE_BCMP 1 |
| 42 | #define HAVE_BCOPY 1 |
| 43 | #define HAVE_BSEARCH 1 |
| 44 | #define HAVE_BZERO 1 |
| 45 | #define HAVE_CALLOC 1 |
| 46 | #define HAVE_CLOCK 1 |
| 47 | #define HAVE_FFS 1 |
| 48 | #define HAVE_GETCWD 1 |
| 49 | #define HAVE_GETPAGESIZE 1 |
| 50 | #define HAVE_GETTIMEOFDAY 1 |
| 51 | #define HAVE_INDEX 1 |
| 52 | #define HAVE_INSQUE 1 |
| 53 | #define HAVE_MEMCHR 1 |
| 54 | #define HAVE_MEMCMP 1 |
| 55 | #define HAVE_MEMCPY 1 |
| 56 | #define HAVE_MEMMOVE 1 |
| 57 | #define HAVE_MEMSET 1 |
| 58 | #define HAVE_MKSTEMPS 1 |
| 59 | #define HAVE_PUTENV 1 |
| 60 | #define HAVE_RANDOM 1 |
| 61 | #define HAVE_RENAME 1 |
| 62 | #define HAVE_RINDEX 1 |
| 63 | #define HAVE_SETENV 1 |
| 64 | #define HAVE_SNPRINTF 1 |
| 65 | #define HAVE_SIGSETMASK 1 |
| 66 | #define HAVE_STPCPY 1 |
| 67 | #define HAVE_STPNCPY 1 |
| 68 | #define HAVE_STRCASECMP 1 |
| 69 | #define HAVE_STRCHR 1 |
| 70 | #define HAVE_STRDUP 1 |
| 71 | #define HAVE_STRNCASECMP 1 |
| 72 | #define HAVE_STRNDUP 1 |
| 73 | #define HAVE_STRRCHR 1 |
| 74 | #define HAVE_STRSTR 1 |
| 75 | #define HAVE_STRTOD 1 |
| 76 | #define HAVE_STRTOL 1 |
| 77 | #define HAVE_STRTOUL 1 |
| 78 | #define HAVE_TMPNAM 1 |
| 79 | #define HAVE_VASPRINTF 1 |
| 80 | #define HAVE_VFPRINTF 1 |
| 81 | #define HAVE_VPRINTF 1 |
| 82 | #define HAVE_VSNPRINTF 1 |
| 83 | #define HAVE_VSPRINTF 1 |
| 84 | #define HAVE_WAITPID 1 |
| 85 | |
| 86 | find_stack_direction () |
| 87 | { |
| 88 | static char *addr = 0; |
| 89 | auto char dummy; |
| 90 | if (addr == 0) |
| |
| 91 | { |
| 92 | addr = &dummy; |
| 93 | return find_stack_direction (); |
| 3 | | Address of stack memory associated with local variable 'dummy' is still referred to by the static variable 'addr' upon returning to the caller. This will be a dangling reference |
|
| 94 | } |
| 95 | else |
| 96 | return (&dummy > addr) ? 1 : -1; |
| 97 | } |
| 98 | main () |
| 99 | { |
| 100 | exit (find_stack_direction() < 0); |
| 1 | Calling 'find_stack_direction' | |
|
| 101 | } |