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