[llvm] r238447 - AsmPrinter: Suppress warnings on GCC from r238362, NFC

Duncan P. N. Exon Smith dexonsmith at apple.com
Thu May 28 11:09:13 PDT 2015


Author: dexonsmith
Date: Thu May 28 13:09:13 2015
New Revision: 238447

URL: http://llvm.org/viewvc/llvm-project?rev=238447&view=rev
Log:
AsmPrinter: Suppress warnings on GCC from r238362, NFC

GCC seems to have some overzealous warnings about strict aliasing.
Rafael reports that this patch suppresses them on GCC 4.9, and I'm
hoping this will work for GCC 4.7 as well.  I'll watch [1] and iterate
if necessary.

[1]: http://bb.pgr.jp/builders/clang-3stage-x86_64-linux/builds/8597

Modified:
    llvm/trunk/include/llvm/CodeGen/DIE.h

Modified: llvm/trunk/include/llvm/CodeGen/DIE.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/DIE.h?rev=238447&r1=238446&r2=238447&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/DIE.h (original)
+++ llvm/trunk/include/llvm/CodeGen/DIE.h Thu May 28 13:09:13 2015
@@ -340,11 +340,11 @@ private:
     new (reinterpret_cast<void *>(Val.buffer)) T(V);
   }
 
-  template <class T> T &get() { return *reinterpret_cast<T *>(Val.buffer); }
-  template <class T> const T &get() const {
-    return *reinterpret_cast<const T *>(Val.buffer);
+  template <class T> T *get() { return reinterpret_cast<T *>(Val.buffer); }
+  template <class T> const T *get() const {
+    return reinterpret_cast<const T *>(Val.buffer);
   }
-  template <class T> void destruct() { get<T>().~T(); }
+  template <class T> void destruct() { get<T>()->~T(); }
 
   /// Destroy the underlying value.
   ///
@@ -378,11 +378,11 @@ private:
       return;
 #define HANDLE_DIEVALUE_SMALL(T)                                               \
   case is##T:                                                                  \
-    construct<DIE##T>(X.get<DIE##T>());                                        \
+    construct<DIE##T>(*X.get<DIE##T>());                                       \
     return;
 #define HANDLE_DIEVALUE_LARGE(T)                                               \
   case is##T:                                                                  \
-    construct<const DIE##T *>(X.get<const DIE##T *>());                        \
+    construct<const DIE##T *>(*X.get<const DIE##T *>());                       \
     return;
 #include "llvm/CodeGen/DIEValue.def"
     }
@@ -425,12 +425,12 @@ public:
 #define HANDLE_DIEVALUE_SMALL(T)                                               \
   const DIE##T &getDIE##T() const {                                            \
     assert(getType() == is##T && "Expected " #T);                              \
-    return get<DIE##T>();                                                      \
+    return *get<DIE##T>();                                                     \
   }
 #define HANDLE_DIEVALUE_LARGE(T)                                               \
   const DIE##T &getDIE##T() const {                                            \
     assert(getType() == is##T && "Expected " #T);                              \
-    return *get<const DIE##T *>();                                             \
+    return **get<const DIE##T *>();                                            \
   }
 #include "llvm/CodeGen/DIEValue.def"
 





More information about the llvm-commits mailing list