зеркало из https://github.com/microsoft/clang.git
Make sure to take the unqualified versions of the canonical types for
type-checking pointer subtraction; if the canonical types aren't used, the qualifiers won't always get stripped off correctly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55620 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
f43aa4410f
Коммит
f1c7b48638
|
@ -1013,7 +1013,7 @@ ActOnCallExpr(ExprTy *fn, SourceLocation LParenLoc,
|
|||
AssignConvertType ConvTy =
|
||||
CheckSingleAssignmentConstraints(ProtoArgType, Arg);
|
||||
TheCall->setArg(i, Arg);
|
||||
|
||||
|
||||
if (DiagnoseAssignmentResult(ConvTy, Arg->getLocStart(), ProtoArgType,
|
||||
ArgType, Arg, "passing"))
|
||||
return true;
|
||||
|
@ -1700,8 +1700,9 @@ QualType Sema::CheckSubtractionOperands(Expr *&lex, Expr *&rex,
|
|||
}
|
||||
|
||||
// Pointee types must be compatible.
|
||||
if (!Context.typesAreCompatible(lpointee.getUnqualifiedType(),
|
||||
rpointee.getUnqualifiedType())) {
|
||||
if (!Context.typesAreCompatible(
|
||||
Context.getCanonicalType(lpointee).getUnqualifiedType(),
|
||||
Context.getCanonicalType(rpointee).getUnqualifiedType())) {
|
||||
Diag(loc, diag::err_typecheck_sub_ptr_compatible,
|
||||
lex->getType().getAsString(), rex->getType().getAsString(),
|
||||
lex->getSourceRange(), rex->getSourceRange());
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
// RUN: clang %s -fsyntax-only -verify -pedantic
|
||||
|
||||
typedef const char rchar;
|
||||
int a(char* a, rchar* b) {
|
||||
return a-b;
|
||||
}
|
Загрузка…
Ссылка в новой задаче