Avoid skipping an initializer with a goto
C++ doesn't allow skipping initialization with a goto. This means that this code is illegal: void func(bool b) { if(b) goto END; int value = 0; //error C2362 with /permissive- //... value used here END: return; } Adding an extra scope makes the code legal. This problem is only detected with /permissive- but now that compiling with this switch is practical we might as well stay /permissive- clean: https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/ Note that compiling /permissive- clean only works with the 10.0.16299.0 SDK which currently has other issues... Bug: 773476 Change-Id: I54e64aaef46d70a817cf7da272f76d9ae5f6a6f7 Reviewed-on: https://chromium-review.googlesource.com/740287 Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
parent
2aaeead73f
commit
73d2773f9f
1 changed files with 9 additions and 6 deletions
|
@ -1166,12 +1166,15 @@ int PDBSourceLineWriter::GetFunctionStackParamSize(IDiaSymbol *function) {
|
|||
goto next_child;
|
||||
}
|
||||
|
||||
int child_end = child_register_offset + static_cast<ULONG>(child_length);
|
||||
if (child_register_offset < lowest_base) {
|
||||
lowest_base = child_register_offset;
|
||||
}
|
||||
if (child_end > highest_end) {
|
||||
highest_end = child_end;
|
||||
// Extra scope to avoid goto jumping over variable initialization
|
||||
{
|
||||
int child_end = child_register_offset + static_cast<ULONG>(child_length);
|
||||
if (child_register_offset < lowest_base) {
|
||||
lowest_base = child_register_offset;
|
||||
}
|
||||
if (child_end > highest_end) {
|
||||
highest_end = child_end;
|
||||
}
|
||||
}
|
||||
|
||||
next_child:
|
||||
|
|
Loading…
Reference in a new issue