diff --git a/expression.c b/expression.c index fa9ed78..de8ec06 100644 --- a/expression.c +++ b/expression.c @@ -1234,7 +1234,7 @@ void ExpressionParseMacroCall(struct ParseState *Parser, struct ExpressionStack #ifndef NO_FP ExpressionStackPushValueByType(Parser, StackTop, &FPType); /* largest return type there is */ #else - ExpressionStackPushValueByType(Parser, StackTop, VoidPtrType); /* largest return type there is */ + ExpressionStackPushValueByType(Parser, StackTop, IntType); /* largest return type there is */ #endif ReturnValue = (*StackTop)->Val; HeapPushStackFrame(); diff --git a/parse.c b/parse.c index b02e843..9bbb8a0 100644 --- a/parse.c +++ b/parse.c @@ -635,7 +635,9 @@ enum ParseResult ParseStatement(struct ParseState *Parser, int CheckTrailingSemi ParseBlock(Parser, TRUE, OldMode != RunModeSkip); - Parser->Mode = OldMode; + if (Parser->Mode != RunModeReturn) + Parser->Mode = OldMode; + Parser->SearchLabel = OldSearchLabel; } diff --git a/tests/47_switch_return.c b/tests/47_switch_return.c index cb2fc6d..2fdb8bd 100644 --- a/tests/47_switch_return.c +++ b/tests/47_switch_return.c @@ -1,22 +1,23 @@ -#include - -void fred(int x) -{ - switch (x) - { - case 1: printf("1\n"); return; - case 2: printf("2\n"); break; - case 3: printf("3\n"); return; - } - - printf("out\n"); -} - -int main() -{ - fred(1); - fred(2); - fred(3); - - return 0; -} \ No newline at end of file +#include + +void fred(int x) +{ + switch (x) + { + case 1: printf("1\n"); return; + case 2: printf("2\n"); break; + case 3: printf("3\n"); return; + } + + printf("out\n"); +} + +int main() +{ + fred(1); + fred(2); + fred(3); + + return 0; +} + diff --git a/tests/47_switch_return.expect b/tests/47_switch_return.expect new file mode 100644 index 0000000..b6deb7e --- /dev/null +++ b/tests/47_switch_return.expect @@ -0,0 +1,4 @@ +1 +2 +out +3 diff --git a/tests/Makefile b/tests/Makefile index 92f742f..3acbf22 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -40,7 +40,8 @@ TESTS= 00_assignment.test \ 41_hashif.test \ 43_void_param.test \ 44_scoped_declarations.test \ - 45_empty_for.test + 45_empty_for.test \ + 47_switch_return.test %.test: %.expect %.c @echo Test: $*...