[PATCH] D38211: [ubsan] Test -fsanitize=function with a C program
Vedant Kumar via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 25 05:04:21 PDT 2017
vsk created this revision.
Herald added a subscriber: kubamracek.
Depends on https://reviews.llvm.org/D38210
https://reviews.llvm.org/D38211
Files:
test/ubsan/TestCases/TypeCheck/Function/function-c.c
Index: test/ubsan/TestCases/TypeCheck/Function/function-c.c
===================================================================
--- /dev/null
+++ test/ubsan/TestCases/TypeCheck/Function/function-c.c
@@ -0,0 +1,68 @@
+// RUN: %clangxx -x c -fsanitize=function %s -O3 -g -o %t
+// RUN: %run %t 2>&1 | FileCheck %s
+
+struct S {};
+
+void no_proto() {}
+
+void proto(void) {}
+
+typedef struct S (*vfunc0)(void);
+typedef void (*vfunc1)(void);
+typedef char (*vfunc2)(void);
+typedef short (*vfunc3)(void);
+typedef int (*vfunc4)(void);
+typedef long long (*vfunc5)(void);
+typedef float (*vfunc6)(void);
+typedef double (*vfunc7)(void);
+typedef void (*vfunc8)(int, int, int, int, int, int, int, int, int, int, int);
+
+void call_proto(void) {
+ // CHECK: function-c.c:[[@LINE+2]]:3: runtime error: call to function proto through pointer to incorrect function type 'struct S (*)(void)'
+ vfunc0 f0 = &proto;
+ f0();
+
+ // CHECK-NOT: function-c.c:[[@LINE+2]]:3: runtime error
+ vfunc1 f1 = &proto;
+ f1();
+
+ // CHECK: function-c.c:[[@LINE+2]]:3: runtime error: call to function proto through pointer to incorrect function type 'char (*)(void)'
+ vfunc2 f2 = &proto;
+ f2();
+
+ // CHECK: function-c.c:[[@LINE+2]]:3: runtime error: call to function proto through pointer to incorrect function type 'short (*)(void)'
+ vfunc3 f3 = &proto;
+ f3();
+
+ // CHECK: function-c.c:[[@LINE+2]]:3: runtime error: call to function proto through pointer to incorrect function type 'int (*)(void)'
+ vfunc4 f4 = &proto;
+ f4();
+
+ // CHECK: function-c.c:[[@LINE+2]]:3: runtime error: call to function proto through pointer to incorrect function type 'long long (*)(void)'
+ vfunc5 f5 = &proto;
+ f5();
+
+ // CHECK: function-c.c:[[@LINE+2]]:3: runtime error: call to function proto through pointer to incorrect function type 'float (*)(void)'
+ vfunc6 f6 = &proto;
+ f6();
+
+ // CHECK: function-c.c:[[@LINE+2]]:3: runtime error: call to function proto through pointer to incorrect function type 'double (*)(void)'
+ vfunc7 f7 = &proto;
+ f7();
+
+ // CHECK: function-c.c:[[@LINE+2]]:3: runtime error: call to function proto through pointer to incorrect function type 'void (*)(int, int, int, int, int, int, int, int, int, int, int)'
+ vfunc8 f8 = &proto;
+ f8(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+}
+
+void call_no_proto(void) {
+ // CHECK: function-c.c:[[@LINE+2]]:3: runtime error: call to function no_proto through pointer to incorrect function type 'struct S (*)(void)'
+ vfunc0 f0 = &no_proto;
+ f0();
+}
+
+int main() {
+ call_proto();
+ call_no_proto();
+ return 0;
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38211.116450.patch
Type: text/x-patch
Size: 2595 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170925/ecea0145/attachment.bin>
More information about the cfe-commits
mailing list