Negative assertions on nil pointers to types that conform to error interface should not panic

Signed-off-by: George Lestaris <glestaris@pivotal.io>
diff --git a/matchers/have_occurred_matcher.go b/matchers/have_occurred_matcher.go
index b5095f1..3dfe9e1 100644
--- a/matchers/have_occurred_matcher.go
+++ b/matchers/have_occurred_matcher.go
@@ -9,7 +9,7 @@
 }
 
 func (matcher *HaveOccurredMatcher) Match(actual interface{}) (success bool, err error) {
-	if actual == nil {
+	if isNil(actual) {
 		return false, nil
 	}
 
diff --git a/matchers/have_occurred_matcher_test.go b/matchers/have_occurred_matcher_test.go
index ef971aa..0fc35a9 100644
--- a/matchers/have_occurred_matcher_test.go
+++ b/matchers/have_occurred_matcher_test.go
@@ -7,6 +7,14 @@
 	. "github.com/onsi/gomega/matchers"
 )
 
+type CustomErr struct {
+	msg string
+}
+
+func (e *CustomErr) Error() string {
+	return e.msg
+}
+
 var _ = Describe("HaveOccurred", func() {
 	It("should succeed if matching an error", func() {
 		Ω(errors.New("Foo")).Should(HaveOccurred())
@@ -25,4 +33,14 @@
 		Ω(success).Should(BeFalse())
 		Ω(err).Should(HaveOccurred())
 	})
+
+	It("should succeed with pointer types that conform to error interface", func() {
+		err := &CustomErr{"ohai"}
+		Ω(err).Should(HaveOccurred())
+	})
+
+	It("should not succeed with nil pointers to types that conform to error interface", func() {
+		var err *CustomErr = nil
+		Ω(err).ShouldNot(HaveOccurred())
+	})
 })