Thanks for taking care of this! On Mon, Dec 7, 2015 at 12:04 PM, Justin Bogner via cfe-commits < cfe-commits@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > -- Alexey Samsonov vonos...@gmail.com
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits