From fa43109756fa09c2e4bcb1a85d15cd881d8a5b73 Mon Sep 17 00:00:00 2001 From: "neil%parkwaycc.co.uk" Date: Fri, 23 Mar 2007 20:26:20 +0000 Subject: [PATCH] Slightly safer and neater fix for strict aliasing bug 351231 r+sr=dbaron git-svn-id: svn://10.0.0.236/trunk@222283 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/xpcom/glue/nsCOMPtr.cpp | 56 ++++++++++++++++----------------- mozilla/xpcom/glue/nsCOMPtr.h | 56 ++++++++++++++++----------------- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/mozilla/xpcom/glue/nsCOMPtr.cpp b/mozilla/xpcom/glue/nsCOMPtr.cpp index 8197310b6d8..bce7e976d54 100644 --- a/mozilla/xpcom/glue/nsCOMPtr.cpp +++ b/mozilla/xpcom/glue/nsCOMPtr.cpp @@ -92,64 +92,64 @@ nsCOMPtr_base::assign_with_AddRef( nsISupports* rawPtr ) void nsCOMPtr_base::assign_from_qi( const nsQueryInterface qi, const nsIID& iid ) { - union { nsISupports *mSupports; void *mVoid; } newRawPtr; - if ( NS_FAILED( qi(iid, &newRawPtr.mVoid) ) ) - newRawPtr.mSupports = 0; - assign_assuming_AddRef(newRawPtr.mSupports); + void* newRawPtr; + if ( NS_FAILED( qi(iid, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(nsISupports*, newRawPtr)); } void nsCOMPtr_base::assign_from_qi_with_error( const nsQueryInterfaceWithError& qi, const nsIID& iid ) { - union { nsISupports* mSupports; void *mVoid; } newRawPtr; - if ( NS_FAILED( qi(iid, &newRawPtr.mVoid) ) ) - newRawPtr.mSupports = 0; - assign_assuming_AddRef(newRawPtr.mSupports); + void* newRawPtr; + if ( NS_FAILED( qi(iid, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(nsISupports*, newRawPtr)); } void nsCOMPtr_base::assign_from_gs_cid( const nsGetServiceByCID gs, const nsIID& iid ) { - union { nsISupports* mSupports; void *mVoid; } newRawPtr; - if ( NS_FAILED( gs(iid, &newRawPtr.mVoid) ) ) - newRawPtr.mSupports = 0; - assign_assuming_AddRef(newRawPtr.mSupports); + void* newRawPtr; + if ( NS_FAILED( gs(iid, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(nsISupports*, newRawPtr)); } void nsCOMPtr_base::assign_from_gs_cid_with_error( const nsGetServiceByCIDWithError& gs, const nsIID& iid ) { - union { nsISupports* mSupports; void *mVoid; } newRawPtr; - if ( NS_FAILED( gs(iid, &newRawPtr.mVoid) ) ) - newRawPtr.mSupports = 0; - assign_assuming_AddRef(newRawPtr.mSupports); + void* newRawPtr; + if ( NS_FAILED( gs(iid, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(nsISupports*, newRawPtr)); } void nsCOMPtr_base::assign_from_gs_contractid( const nsGetServiceByContractID gs, const nsIID& iid ) { - union { nsISupports* mSupports; void *mVoid; } newRawPtr; - if ( NS_FAILED( gs(iid, &newRawPtr.mVoid) ) ) - newRawPtr.mSupports = 0; - assign_assuming_AddRef(newRawPtr.mSupports); + void* newRawPtr; + if ( NS_FAILED( gs(iid, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(nsISupports*, newRawPtr)); } void nsCOMPtr_base::assign_from_gs_contractid_with_error( const nsGetServiceByContractIDWithError& gs, const nsIID& iid ) { - union { nsISupports* mSupports; void *mVoid; } newRawPtr; - if ( NS_FAILED( gs(iid, &newRawPtr.mVoid) ) ) - newRawPtr.mSupports = 0; - assign_assuming_AddRef(newRawPtr.mSupports); + void* newRawPtr; + if ( NS_FAILED( gs(iid, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(nsISupports*, newRawPtr)); } void nsCOMPtr_base::assign_from_helper( const nsCOMPtr_helper& helper, const nsIID& iid ) { - union { nsISupports* mSupports; void *mVoid; } newRawPtr; - if ( NS_FAILED( helper(iid, &newRawPtr.mVoid) ) ) - newRawPtr.mSupports = 0; - assign_assuming_AddRef(newRawPtr.mSupports); + void* newRawPtr; + if ( NS_FAILED( helper(iid, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(nsISupports*, newRawPtr)); } void** diff --git a/mozilla/xpcom/glue/nsCOMPtr.h b/mozilla/xpcom/glue/nsCOMPtr.h index 7c3eccd069c..938d0adf882 100644 --- a/mozilla/xpcom/glue/nsCOMPtr.h +++ b/mozilla/xpcom/glue/nsCOMPtr.h @@ -1240,70 +1240,70 @@ template void nsCOMPtr::assign_from_qi( const nsQueryInterface qi, const nsIID& aIID ) { - union { T* mT; void *mVoid; } newRawPtr; - if ( NS_FAILED( qi(aIID, &newRawPtr.mVoid) ) ) - newRawPtr.mT = 0; - assign_assuming_AddRef(newRawPtr.mT); + void* newRawPtr; + if ( NS_FAILED( qi(aIID, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(T*, newRawPtr)); } template void nsCOMPtr::assign_from_qi_with_error( const nsQueryInterfaceWithError& qi, const nsIID& aIID ) { - union { T* mT; void *mVoid; } newRawPtr; - if ( NS_FAILED( qi(aIID, &newRawPtr.mVoid) ) ) - newRawPtr.mT = 0; - assign_assuming_AddRef(newRawPtr.mT); + void* newRawPtr; + if ( NS_FAILED( qi(aIID, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(T*, newRawPtr)); } template void nsCOMPtr::assign_from_gs_cid( const nsGetServiceByCID gs, const nsIID& aIID ) { - union { T* mT; void *mVoid; } newRawPtr; - if ( NS_FAILED( gs(aIID, &newRawPtr.mVoid) ) ) - newRawPtr.mT = 0; - assign_assuming_AddRef(newRawPtr.mT); + void* newRawPtr; + if ( NS_FAILED( gs(aIID, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(T*, newRawPtr)); } template void nsCOMPtr::assign_from_gs_cid_with_error( const nsGetServiceByCIDWithError& gs, const nsIID& aIID ) { - union { T* mT; void *mVoid; } newRawPtr; - if ( NS_FAILED( gs(aIID, &newRawPtr.mVoid) ) ) - newRawPtr.mT = 0; - assign_assuming_AddRef(newRawPtr.mT); + void* newRawPtr; + if ( NS_FAILED( gs(aIID, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(T*, newRawPtr)); } template void nsCOMPtr::assign_from_gs_contractid( const nsGetServiceByContractID gs, const nsIID& aIID ) { - union { T* mT; void *mVoid; } newRawPtr; - if ( NS_FAILED( gs(aIID, &newRawPtr.mVoid) ) ) - newRawPtr.mT = 0; - assign_assuming_AddRef(newRawPtr.mT); + void* newRawPtr; + if ( NS_FAILED( gs(aIID, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(T*, newRawPtr)); } template void nsCOMPtr::assign_from_gs_contractid_with_error( const nsGetServiceByContractIDWithError& gs, const nsIID& aIID ) { - union { T* mT; void *mVoid; } newRawPtr; - if ( NS_FAILED( gs(aIID, &newRawPtr.mVoid) ) ) - newRawPtr.mT = 0; - assign_assuming_AddRef(newRawPtr.mT); + void* newRawPtr; + if ( NS_FAILED( gs(aIID, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(T*, newRawPtr)); } template void nsCOMPtr::assign_from_helper( const nsCOMPtr_helper& helper, const nsIID& aIID ) { - union { T* mT; void *mVoid; } newRawPtr; - if ( NS_FAILED( helper(aIID, &newRawPtr.mVoid) ) ) - newRawPtr.mT = 0; - assign_assuming_AddRef(newRawPtr.mT); + void* newRawPtr; + if ( NS_FAILED( helper(aIID, &newRawPtr) ) ) + newRawPtr = 0; + assign_assuming_AddRef(NS_STATIC_CAST(T*, newRawPtr)); } template