diff options
-rw-r--r-- | test/CodeGen/Inputs/stdio.h | 9 | ||||
-rw-r--r-- | test/CodeGen/builtin-recursive.cc | 10 |
2 files changed, 19 insertions, 0 deletions
diff --git a/test/CodeGen/Inputs/stdio.h b/test/CodeGen/Inputs/stdio.h new file mode 100644 index 0000000000..cfe359597b --- /dev/null +++ b/test/CodeGen/Inputs/stdio.h @@ -0,0 +1,9 @@ +struct FILE; +extern int vfprintf(struct FILE *s, const char *format, __builtin_va_list arg); +extern int vprintf(const char *format, __builtin_va_list arg); + +extern __inline __attribute__((gnu_inline,always_inline)) int +vprintf(const char *x, __builtin_va_list y) +{ + return vfprintf (0, 0, 0); +} diff --git a/test/CodeGen/builtin-recursive.cc b/test/CodeGen/builtin-recursive.cc new file mode 100644 index 0000000000..81e9b9a37c --- /dev/null +++ b/test/CodeGen/builtin-recursive.cc @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -nostdsysteminc -nobuiltininc -isystem Inputs -emit-llvm-only %s + +// This used to cause a read past the end of a global variable. + +#include <stdio.h> + +void testcase(void) { + vprintf(0, 0); +} + |