[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