| Index: src/lazy-instance.h | 
| diff --git a/src/lazy-instance.h b/src/lazy-instance.h | 
| index 4beb55c0a291b05cf91bde23ffd8af03f1be9f6a..d0893e560470ee345adbd1af45cd295b998fc610 100644 | 
| --- a/src/lazy-instance.h | 
| +++ b/src/lazy-instance.h | 
| @@ -107,9 +107,17 @@ struct LeakyInstanceTrait { | 
|  | 
| // Traits that define how an instance is allocated and accessed. | 
|  | 
| +// TODO(kalmard): __alignof__ is only defined for GCC > 4.2. Fix alignment issue | 
| +// on MIPS with other compilers. | 
| +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) | 
| +#define LAZY_ALIGN(x) __attribute__((aligned(__alignof__(x)))) | 
| +#else | 
| +#define LAZY_ALIGN(x) | 
| +#endif | 
| + | 
| template <typename T> | 
| struct StaticallyAllocatedInstanceTrait { | 
| -  typedef char StorageType[sizeof(T)]; | 
| +  typedef char StorageType[sizeof(T)] LAZY_ALIGN(T); | 
|  | 
| static T* MutableInstance(StorageType* storage) { | 
| return reinterpret_cast<T*>(storage); | 
| @@ -121,6 +129,8 @@ struct StaticallyAllocatedInstanceTrait { | 
| } | 
| }; | 
|  | 
| +#undef LAZY_ALIGN | 
| + | 
|  | 
| template <typename T> | 
| struct DynamicallyAllocatedInstanceTrait { | 
| @@ -208,7 +218,8 @@ struct LazyInstanceImpl { | 
|  | 
| mutable OnceType once_; | 
| // Note that the previous field, OnceType, is an AtomicWord which guarantees | 
| -  // the correct alignment of the storage field below. | 
| +  // 4-byte alignment of the storage field below. If compiling with GCC (>4.2), | 
| +  // the LAZY_ALIGN macro above will guarantee correctness for any alignment. | 
| mutable StorageType storage_; | 
| }; | 
|  | 
|  |