rsmith added inline comments.
================ Comment at: lib/AST/ItaniumMangle.cpp:2329-2333 + // __unaligned is not currently mangled in any way. This implies that it is + // not a relevant qualifier for substitutions (while CVR and maybe others + // are). This triggers an assertion when this is the only qualifier and the + // unqualified type is a class. So let's remove it preventively here. + quals.removeUnaligned(); ---------------- I don't think this is the right place/way to handle this: given ``` void f(struct X __unaligned *p, struct X *q) {} ``` it looks like we'll mangle as `_Z1fP1XP1X` with this patch, which seems wrong: this should presumably instead be `_Z1fP1XS0_`. But regardless, I think the right thing to do is to invent a mangling for `__unaligned`, since we support overloading on it; the most appropriate mangling would be `U11__unaligned`, per http://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling-type. (You'll need to extend `mangleQualifiers` to emit this and `hasMangledSubstitutionQualifiers` to ignore it.) https://reviews.llvm.org/D33398 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits