r254935 - AST: defer to TypeLoc::copy in TypeLoc::initializeFullCopy

Alexey Samsonov via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 7 14:52:55 PST 2015


Thanks for taking care of this!

On Mon, Dec 7, 2015 at 12:04 PM, Justin Bogner via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: bogner
> Date: Mon Dec  7 14:04:57 2015
> New Revision: 254935
>
> URL: http://llvm.org/viewvc/llvm-project?rev=254935&view=rev
> Log:
> AST: defer to TypeLoc::copy in TypeLoc::initializeFullCopy
>
> If we're initializing a TypeLoc from one that's been allocated with
> different alignment, memcpy will get the padding wrong. The `copy`
> method already checks and handles this case, so we should just defer
> to it.
>
> This also drops the `const` off of the `initializeFullCopy`
> declarations, since it isn't even remotely true (and the compiler
> notices when we try to call copy() instead of tricking it with
> memcpy).
>
> Fixes llvm.org/pr23516.
>
> Modified:
>     cfe/trunk/include/clang/AST/TypeLoc.h
>
> Modified: cfe/trunk/include/clang/AST/TypeLoc.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/TypeLoc.h?rev=254935&r1=254934&r2=254935&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/AST/TypeLoc.h (original)
> +++ cfe/trunk/include/clang/AST/TypeLoc.h Mon Dec  7 14:04:57 2015
> @@ -170,19 +170,18 @@ public:
>
>    /// \brief Initializes this by copying its information from another
>    /// TypeLoc of the same type.
> -  void initializeFullCopy(TypeLoc Other) const {
> +  void initializeFullCopy(TypeLoc Other) {
>      assert(getType() == Other.getType());
> -    size_t Size = getFullDataSize();
> -    memcpy(getOpaqueData(), Other.getOpaqueData(), Size);
> +    copy(Other);
>    }
>
>    /// \brief Initializes this by copying its information from another
>    /// TypeLoc of the same type.  The given size must be the full data
>    /// size.
> -  void initializeFullCopy(TypeLoc Other, unsigned Size) const {
> +  void initializeFullCopy(TypeLoc Other, unsigned Size) {
>      assert(getType() == Other.getType());
>      assert(getFullDataSize() == Size);
> -    memcpy(getOpaqueData(), Other.getOpaqueData(), Size);
> +    copy(Other);
>    }
>
>    /// Copies the other type loc into this one.
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>



-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151207/7829d92d/attachment.html>


More information about the cfe-commits mailing list