Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/jit.dg/test-error-gcc_jit_context_new_case-non-const-label.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 #include <stdlib.h> | |
2 #include <stdio.h> | |
3 #include <string.h> | |
4 | |
5 #include "libgccjit.h" | |
6 | |
7 #include "harness.h" | |
8 | |
9 void | |
10 create_code (gcc_jit_context *ctxt, void *user_data) | |
11 { | |
12 /* Let's try to inject the equivalent of: | |
13 int | |
14 test_switch (int x) | |
15 { | |
16 switch (x) | |
17 { | |
18 case x: | |
19 return 3; | |
20 | |
21 default: | |
22 return 10; | |
23 } | |
24 } | |
25 and verify that we get a sane error about the non-const | |
26 case. | |
27 */ | |
28 gcc_jit_type *t_int = | |
29 gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT); | |
30 gcc_jit_type *return_type = t_int; | |
31 gcc_jit_param *x = | |
32 gcc_jit_context_new_param (ctxt, NULL, t_int, "x"); | |
33 gcc_jit_param *params[1] = {x}; | |
34 gcc_jit_function *func = | |
35 gcc_jit_context_new_function (ctxt, NULL, | |
36 GCC_JIT_FUNCTION_EXPORTED, | |
37 return_type, | |
38 "test_switch", | |
39 1, params, 0); | |
40 | |
41 gcc_jit_block *b_initial = | |
42 gcc_jit_function_new_block (func, "initial"); | |
43 | |
44 gcc_jit_block *b_default = | |
45 gcc_jit_function_new_block (func, "default"); | |
46 gcc_jit_block *b_case_x = | |
47 gcc_jit_function_new_block (func, "case_x"); | |
48 | |
49 /* Erroneous use of non-const x for a case. */ | |
50 gcc_jit_case *cases[1] = { | |
51 gcc_jit_context_new_case ( | |
52 ctxt, | |
53 gcc_jit_param_as_rvalue (x), | |
54 gcc_jit_param_as_rvalue (x), | |
55 b_case_x) | |
56 }; | |
57 | |
58 gcc_jit_block_end_with_switch ( | |
59 b_initial, NULL, | |
60 gcc_jit_param_as_rvalue (x), | |
61 b_default, | |
62 1, | |
63 cases); | |
64 gcc_jit_block_end_with_return ( | |
65 b_case_x, NULL, | |
66 gcc_jit_context_new_rvalue_from_int (ctxt, t_int, 3)); | |
67 gcc_jit_block_end_with_return ( | |
68 b_default, NULL, | |
69 gcc_jit_context_new_rvalue_from_int (ctxt, t_int, 10)); | |
70 } | |
71 | |
72 void | |
73 verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) | |
74 { | |
75 CHECK_VALUE (result, NULL); | |
76 | |
77 CHECK_STRING_VALUE (gcc_jit_context_get_first_error (ctxt), | |
78 "gcc_jit_context_new_case:" | |
79 " min_value is not a constant: x"); | |
80 } |