for _, s := range list {
                // ignore empty statements (was issue 3466)
                if _, isEmpty := s.(*ast.EmptyStmt); !isEmpty {
-                       // _indent == 0 only for lists of switch/select case clauses;
+                       // nindent == 0 only for lists of switch/select case clauses;
                        // in those cases each clause is a new section
                        if len(p.output) > 0 {
                                // only print line break if we are not at the beginning of the output
                                p.linebreak(p.lineFor(s.Pos()), 1, ignore, i == 0 || nindent == 0 || multiLine)
                        }
                        p.stmt(s, nextIsRBrace && i == len(list)-1)
-                       multiLine = p.isMultiLine(s)
+                       // labeled statements put labels on a separate line, but here
+                       // we only care about whether the actual statement w/o label
+                       // is a multi-line statement - remove the label first
+                       // (was issue 5623)
+                       multiLine = p.isMultiLine(unlabeledStmt(s))
                        i++
                }
        }
        }
 }
 
+// unlabeledStmt returns the statement of a labeled statement s;
+// otherwise it return s.
+func unlabeledStmt(s ast.Stmt) ast.Stmt {
+       if s, _ := s.(*ast.LabeledStmt); s != nil {
+               return unlabeledStmt(s.Stmt)
+       }
+       return s
+}
+
 // block prints an *ast.BlockStmt; it always spans at least two lines.
 func (p *printer) block(b *ast.BlockStmt, nindent int) {
        p.print(b.Lbrace, token.LBRACE)
 
                println("test")
        }
 }
+
+func issue5623() {
+L:
+       _ = yyyyyyyyyyyyyyyy                    // comment - should be aligned
+       _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx        /* comment */
+
+       _ = yyyyyyyyyyyyyyyy                    /* comment - should be aligned */
+       _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx        // comment
+
+LLLLLLL:
+       _ = yyyyyyyyyyyyyyyy                    // comment - should be aligned
+       _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx        // comment
+
+LL:
+       _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx        /* comment */
+       _ = yyyyyyyyyyyyyyyy                    /* comment - should be aligned */
+
+       _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx        // comment
+       _ = yyyyyyyyyyyyyyyy                    // comment - should be aligned
+
+       // test case from issue
+label:
+       mask := uint64(1)<<c - 1                // Allocation mask
+       used := atomic.LoadUint64(&h.used)      // Current allocations
+}
 
    for i := 0; i < 5; i++ {
       println("test")
    }
-}
\ No newline at end of file
+}
+
+func issue5623() {
+L:
+   _ = yyyyyyyyyyyyyyyy // comment - should be aligned
+   _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx /* comment */
+
+   _ = yyyyyyyyyyyyyyyy /* comment - should be aligned */
+   _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx // comment
+
+LLLLLLL:
+   _ = yyyyyyyyyyyyyyyy // comment - should be aligned
+   _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx // comment
+
+LL:
+   _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx /* comment */
+   _ = yyyyyyyyyyyyyyyy /* comment - should be aligned */
+
+   _ = xxxxxxxxxxxxxxxxxxxxxxxxxxxx // comment
+   _ = yyyyyyyyyyyyyyyy // comment - should be aligned
+
+// test case from issue
+label:
+   mask := uint64(1)<<c - 1 // Allocation mask
+   used := atomic.LoadUint64(&h.used) // Current allocations
+}