macro(m) message(STATUS " start m") foreach(i 1 2) message(STATUS " start loop body") message(SEND_ERROR "error in loop body") message(STATUS " end loop body") endforeach() message(STATUS " end m") endmacro() function(f) message(STATUS " start f") m() message(STATUS " end f") endfunction() message(STATUS "before f") f() message(STATUS "after f")