diff --git a/pkg/golinters/unused.go b/pkg/golinters/unused.go
index 5f6d8371..ac5a90d4 100644
--- a/pkg/golinters/unused.go
+++ b/pkg/golinters/unused.go
@@ -33,7 +33,7 @@ func NewUnused() *goanalysis.Linter {
 		for _, ur := range u.Result() {
 			p := u.ProblemObject(lintCtx.Packages[0].Fset, ur)
 			pkg := typesToPkg[ur.Pkg()]
-			issues = append(issues, goanalysis.NewIssue(&result.Issue{ //nolint:scopelint
+			i := &result.Issue{
 				FromLinter: name,
 				Text:       p.Message,
 				Pos:        p.Pos,
@@ -42,11 +42,16 @@ func NewUnused() *goanalysis.Linter {
 					From: p.Pos.Line,
 					To:   p.End.Line,
 				},
-				Replacement: &result.Replacement{
+			}
+			// See https://github.com/golangci/golangci-lint/issues/1048
+			// If range is invalid, this will break `--fix` mode.
+			if i.LineRange.To >= i.LineRange.From {
+				i.Replacement = &result.Replacement{
 					// Suggest deleting unused stuff.
 					NeedOnlyDelete: true,
-				},
-			}, nil))
+				}
+			}
+			issues = append(issues, goanalysis.NewIssue(i, nil))
 		}
 		return issues
 	}).WithContextSetter(func(lintCtx *linter.Context) {
diff --git a/pkg/result/processors/fixer.go b/pkg/result/processors/fixer.go
index 3f7abbc8..29313d7f 100644
--- a/pkg/result/processors/fixer.go
+++ b/pkg/result/processors/fixer.go
@@ -223,6 +223,12 @@ func (f Fixer) writeFixedFile(origFileLines [][]byte, issues []result.Issue, tmp
 		} else {
 			nextIssueIndex++
 			rng := nextIssue.GetLineRange()
+			if rng.From > rng.To {
+				// Maybe better decision is to skip such issues, re-evaluate if regressed.
+				f.log.Warnf("[fixer]: issue line range is probably invalid, fix can be incorrect (from=%d, to=%d, linter=%s)",
+					rng.From, rng.To, nextIssue.FromLinter,
+				)
+			}
 			i += rng.To - rng.From
 			if nextIssue.Replacement.NeedOnlyDelete {
 				continue
diff --git a/test/testdata/fix/in/unused.go b/test/testdata/fix/in/unused.go
new file mode 100644
index 00000000..fa8979c2
--- /dev/null
+++ b/test/testdata/fix/in/unused.go
@@ -0,0 +1,8 @@
+//args: -Eunused
+package p
+
+type (
+	unused struct{}
+)
+
+func X() {}
diff --git a/test/testdata/fix/out/unused.go b/test/testdata/fix/out/unused.go
new file mode 100644
index 00000000..fa8979c2
--- /dev/null
+++ b/test/testdata/fix/out/unused.go
@@ -0,0 +1,8 @@
+//args: -Eunused
+package p
+
+type (
+	unused struct{}
+)
+
+func X() {}