diff --git a/mapstructure.go b/mapstructure.go
index <HASH>..<HASH> 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -805,6 +805,11 @@ func (d *Decoder) decodeSlice(name string, data interface{}, val reflect.Value) 
 
 		}
 
+		// If the input value is empty, then don't allocate since non-nil != nil
+		if dataVal.Len() == 0 {
+			return nil
+		}
+
 		// Make a new slice to hold our result, same size as the original data.
 		valSlice = reflect.MakeSlice(sliceType, dataVal.Len(), dataVal.Len())
 	}
diff --git a/mapstructure_test.go b/mapstructure_test.go
index <HASH>..<HASH> 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -102,6 +102,11 @@ type Slice struct {
 	Vbar []string
 }
 
+type SliceOfAlias struct {
+	Vfoo string
+	Vbar SliceAlias
+}
+
 type SliceOfStruct struct {
 	Value []Basic
 }
@@ -1454,6 +1459,13 @@ func TestDecodeTable(t *testing.T) {
 			&SlicePointer{},
 			false,
 		},
+		{
+			"slice to slice alias",
+			&Slice{},
+			&SliceOfAlias{},
+			&SliceOfAlias{},
+			false,
+		},
 
 		{
 			"slice input - should error",
nil slice should not allocate empty slice in struct