From: Jean Privat Date: Wed, 21 Jan 2015 02:39:30 +0000 (+0700) Subject: Merge: Check missing return in attributes with a block X-Git-Tag: v0.7.1~19 X-Git-Url: http://nitlanguage.org?hp=036be01595b2709b2c8e5187c0e50177a1e06f89 Merge: Check missing return in attributes with a block Fixes #1103 Pull-Request: #1114 Reviewed-by: Alexandre Terrasa Reviewed-by: Alexis Laferrière --- diff --git a/src/semantize/typing.nit b/src/semantize/typing.nit index 8fb3852..343edbd 100644 --- a/src/semantize/typing.nit +++ b/src/semantize/typing.nit @@ -609,6 +609,10 @@ redef class AAttrPropdef var nblock = self.n_block if nblock != null then v.visit_stmt(nblock) + if not nblock.after_flow_context.is_unreachable then + # We reach the end of the init without having a return, it is bad + v.error(self, "Control error: Reached end of block (a 'return' with a value was expected).") + end end end end diff --git a/tests/base_attr_init_val_block.nit b/tests/base_attr_init_val_block.nit index 6d2badc..fdafa3d 100644 --- a/tests/base_attr_init_val_block.nit +++ b/tests/base_attr_init_val_block.nit @@ -24,7 +24,7 @@ class A 2.output var res = a if res == 10 then res = 20 - return res + return res #alt1# return #alt2# end end diff --git a/tests/sav/base_attr_init_val_block_alt1.res b/tests/sav/base_attr_init_val_block_alt1.res new file mode 100644 index 0000000..e50539b --- /dev/null +++ b/tests/sav/base_attr_init_val_block_alt1.res @@ -0,0 +1 @@ +alt/base_attr_init_val_block_alt1.nit:27,3--8: Error: Return without value in a function. diff --git a/tests/sav/base_attr_init_val_block_alt2.res b/tests/sav/base_attr_init_val_block_alt2.res new file mode 100644 index 0000000..8545480 --- /dev/null +++ b/tests/sav/base_attr_init_val_block_alt2.res @@ -0,0 +1 @@ +alt/base_attr_init_val_block_alt2.nit:23,6: Control error: Reached end of block (a 'return' with a value was expected).