Question: My guess is it just made parsing easier, but I can't see exactly why.

So what does this have ...

```
do
{
  some stuff
}
while(test);

more stuff

```

that's better than ...

```
do
{
  some stuff
}
while(test)

more stuff

```

Answer: 
While I don't know the answer, consistency seems like the best argument. Every statement group in C/C++ is either terminated by 

1. A semicolon
2. A brace

Why create a construct which does neither?
In C/C++ whitespace don't contribute to structure (like e.g. in python). In C/C++ statements **must** be terminated with a semicolon. This is allowed:

```
do
{
  some stuff; more stuff; even more stuff;
}
while(test);

```