2014-07-27 Andrei Herman * cp-tree.h (pop_scope_for_labels): New. * parser.c (cp_parser_statement): Add last_label and pass it when calling cp_parser_label_for_labeled_statement, to create a label scope for the first label of a statement. Close forced scopes at current level, after labeled compound statements that do not fall through. (cp_parser_force_block_for_label): New. (pop_scope_for_labels): New. (cp_parser_label_for_labeled_statement): Add parameter. Create a label scope for the first label of a statement. (cp_parser_compound_statement): Force a block for compound statement. (cp_parser_implicitly_scoped_statement): Likewise for if-then, if-else, switch and do statements. (cp_parser_already_scoped_statement): Likewise for for/while bodies. * semantics.c (do_poplevel): Close any forced scopes in given level. (build_data_member_initialization): Allow BIND_EXP. * name-lookup.h (keep_current_level): New. * name-lookup.c (keep_current_level): New. (kept_level_p): When flag_force_dwarf_blocks, avoid creating duplicate blocks. * cp-objcp-common.c (cxx_block_may_fallthru): Return false for break or continue, when flag_force_dwarf_blocks.