Hi, This patch went into U-Boot - I see that the YAFFS code in this area is quite different but on closer inspection it looks like this warning may still crop up in gcc 4.6. Regards, Simon ---------- Forwarded message ---------- From: Simon Glass Date: Tue, Nov 15, 2011 at 8:17 PM Subject: [PATCH 2/2] Fix warnings in yaffs To: U-Boot Mailing List Cc: Simon Glass Sorry if this is already fixed somewhere - I could not find it. This fixes the warnings show below. yaffs_tagscompat.c: In function 'yaffs_TagsCompatabilityReadChunkWithTagsFromNAND': yaffs_tagscompat.c:151: warning: dereferencing pointer 'tu' does break strict-aliasing rules yaffs_tagscompat.c:150: warning: dereferencing pointer 'tu' does break strict-aliasing rules yaffs_tagscompat.c:149: warning: dereferencing pointer 'tu' does break strict-aliasing rules yaffs_tagscompat.c:148: warning: dereferencing pointer 'tu' does break strict-aliasing rules yaffs_tagscompat.c:147: warning: dereferencing pointer 'tu' does break strict-aliasing rules yaffs_tagscompat.c:146: warning: dereferencing pointer 'tu' does break strict-aliasing rules yaffs_tagscompat.c:145: warning: dereferencing pointer 'tu' does break strict-aliasing rules yaffs_tagscompat.c:144: warning: dereferencing pointer 'tu' does break strict-aliasing rules yaffs_tagscompat.c:141: note: initialized from here Signed-off-by: Simon Glass ---  fs/yaffs2/yaffs_tagscompat.c |   15 +++++++--------  1 files changed, 7 insertions(+), 8 deletions(-) diff --git a/fs/yaffs2/yaffs_tagscompat.c b/fs/yaffs2/yaffs_tagscompat.c index 70a8a8c..e872323 100644 --- a/fs/yaffs2/yaffs_tagscompat.c +++ b/fs/yaffs2/yaffs_tagscompat.c @@ -136,9 +136,8 @@ static void yaffs_LoadTagsIntoSpare(yaffs_Spare * sparePtr,  }  static void yaffs_GetTagsFromSpare(yaffs_Device * dev, yaffs_Spare * sparePtr, -                                  yaffs_Tags * tagsPtr) +                                  yaffs_TagsUnion *tu)  { -       yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;        int result;        tu->asBytes[0] = sparePtr->tagByte0; @@ -150,7 +149,7 @@ static void yaffs_GetTagsFromSpare(yaffs_Device * dev, yaffs_Spare * sparePtr,        tu->asBytes[6] = sparePtr->tagByte6;        tu->asBytes[7] = sparePtr->tagByte7; -       result = yaffs_CheckECCOnTags(tagsPtr); +       result = yaffs_CheckECCOnTags(&tu->asTags);        if (result > 0) {                dev->tagsEccFixed++;        } else if (result < 0) { @@ -437,7 +436,7 @@ int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,  {        yaffs_Spare spare; -       yaffs_Tags tags; +       yaffs_TagsUnion tags;        yaffs_ECCResult eccResult;        static yaffs_Spare spareFF; @@ -467,10 +466,10 @@ int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,                        if (eTags->chunkUsed) {                                yaffs_GetTagsFromSpare(dev, &spare, &tags); -                               eTags->objectId = tags.objectId; -                               eTags->chunkId = tags.chunkId; -                               eTags->byteCount = tags.byteCount; -                               eTags->serialNumber = tags.serialNumber; +                               eTags->objectId = tags.asTags.objectId; +                               eTags->chunkId = tags.asTags.chunkId; +                               eTags->byteCount = tags.asTags.byteCount; +                               eTags->serialNumber = tags.asTags.serialNumber;                        }                } -- 1.7.3.1