aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-03-05 20:21:47 +0100
committerChristopher Li <sparse@chrisli.org>2017-03-06 08:47:52 +0800
commitfdd39251681b5f8374695a39581c982d7ea4faff (patch)
tree0efb592ceaa51a88ecfe291a58bad7d6d062ab1e /validation
parent8ed1b1006d2072e83b0a6b825b0fe6c6d37e8ae0 (diff)
downloadsparse-dev-fdd39251681b5f8374695a39581c982d7ea4faff.tar.gz
replace test for c99 for-loop initializers
This test is to insure that a for-loop with C99-style initializer linearize correctly: the same as a C89-style one (modulo any effect on the scope of the variables). For example that code like: for (int = 0; i < 10; i++) do_stuff(i); is linearized the same as code like: int i; for (i = 0; i < 10; i++) do_stuff(i); A test for this already exist in the testsuite: 0e91f878 ("validation: Check C99 for loop variables") which show the correctness of the fix:: ed73fd32 ("linearize: Emit C99 declarations correctly") But this test is an indirect one, using the presence or absence of warning about context imbalance to show that some part of code is present or not. Now that we have the minimal tools to test the output of test-linearize, use them to replace the test by a direct one. Note: ideally we would like to show that the C89 & the C99 version generate the same code but the testsuie deosn't allow this (yet). Test-case-for: ed73fd32 ("linearize: Emit C99 declarations correctly") Replaces: 0e91f878 ("validation: Check C99 for loop variables") Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> Signed-off-by: Christopher Li <sparse@chrisli.org>
Diffstat (limited to 'validation')
-rw-r--r--validation/c99-for-loop.c36
1 files changed, 12 insertions, 24 deletions
diff --git a/validation/c99-for-loop.c b/validation/c99-for-loop.c
index 42246c51..427fde26 100644
--- a/validation/c99-for-loop.c
+++ b/validation/c99-for-loop.c
@@ -1,33 +1,21 @@
-int op(int);
-
-static int good(void)
+int c99(void);
+int c99(void)
{
- __context__(1);
- for (int i = 0; i < 10; i++) {
- if (!op(i)) {
- __context__(-1);
- return 0;
- }
- }
- __context__(-1);
- return 1;
-}
+ int r = -1;
-static int bad(void)
-{
- __context__(1);
for (int i = 0; i < 10; i++) {
- if (!op(i)) {
- __context__(-1);
- return 0;
- }
+ r = i;
}
- return 1;
+
+ return r;
}
+
/*
* check-name: C99 for loop variable declaration
+ * check-command: test-linearize $file
*
- * check-error-start
-c99-for-loop.c:16:12: warning: context imbalance in 'bad' - different lock contexts for basic block
- * check-error-end
+ * check-output-ignore
+ * check-output-contains: phisrc\\.
+ * check-output-contains: phi\\.
+ * check-output-contains: add\\.
*/