summaryrefslogtreecommitdiff
path: root/test/AST/c-casts.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/AST/c-casts.c')
-rw-r--r--test/AST/c-casts.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/AST/c-casts.c b/test/AST/c-casts.c
new file mode 100644
index 0000000000000..c3a58ed8274ca
--- /dev/null
+++ b/test/AST/c-casts.c
@@ -0,0 +1,25 @@
+// RUN: %clang_cc1 -w -ast-dump %s | FileCheck %s
+
+// The cast construction code both for implicit and c-style casts is very
+// different in C vs C++. This file is intended to test the C behavior.
+
+// TODO: add tests covering the rest of the code in
+// Sema::CheckAssignmentConstraints and Sema::PrepareScalarCast
+
+// CHECK-LABEL: FunctionDecl {{.*}} cast_cvr_pointer
+void cast_cvr_pointer(char volatile * __restrict * const * p) {
+ char*** x;
+ // CHECK: ImplicitCastExpr {{.*}} 'char ***' <NoOp>
+ x = p;
+ // CHECK: CStyleCastExpr {{.*}} 'char ***' <NoOp>
+ x = (char***)p;
+}
+
+// CHECK-LABEL: FunctionDecl {{.*}} cast_pointer_type
+void cast_pointer_type(char *p) {
+ void *x;
+ // CHECK: ImplicitCastExpr {{.*}} 'void *' <BitCast>
+ x = p;
+ // CHECK: CStyleCastExpr {{.*}} 'void *' <BitCast>
+ x = (void*)p;
+}