[llvm] r238447 - AsmPrinter: Suppress warnings on GCC from r238362, NFC
David Blaikie
dblaikie at gmail.com
Thu Jun 4 15:09:23 PDT 2015
On Thu, May 28, 2015 at 11:09 AM, Duncan P. N. Exon Smith <
dexonsmith at apple.com> wrote:
> 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.
>
Oh, and just to check - I assume we couldn't just use a union here because
(I assume?) MSVC 2013 doesn't support generalized unions of C++11? (& there
are non-trivial things here, like DIELocList, etc)
>
> [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"
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150604/384684d3/attachment.html>
More information about the llvm-commits
mailing list