forked from OSchip/llvm-project
Provide a proper source location when building an implicit dereference. Fixes PR3600
llvm-svn: 64993
This commit is contained in:
parent
83e3eea5fc
commit
0f3dd9a86b
|
@ -3705,7 +3705,7 @@ Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
|
|||
if (MemExpr->isArrow())
|
||||
ObjectArg = new (Context) UnaryOperator(ObjectArg, UnaryOperator::Deref,
|
||||
ObjectArg->getType()->getAsPointerType()->getPointeeType(),
|
||||
SourceLocation());
|
||||
ObjectArg->getLocStart());
|
||||
CXXMethodDecl *Method = 0;
|
||||
if (OverloadedFunctionDecl *Ovl
|
||||
= dyn_cast<OverloadedFunctionDecl>(MemExpr->getMemberDecl())) {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
|
||||
class X {
|
||||
public:
|
||||
explicit X(const X&);
|
||||
|
@ -15,3 +14,10 @@ void f(Y y, int *ip, float *fp) {
|
|||
X x3 = ip;
|
||||
X x4 = fp; // expected-error{{cannot initialize 'x4' with an lvalue of type 'float *'}}
|
||||
}
|
||||
|
||||
struct foo {
|
||||
void bar();
|
||||
};
|
||||
|
||||
// PR3600
|
||||
void test(const foo *P) { P->bar(); } // expected-error{{cannot initialize object parameter of type 'struct foo' with an expression of type 'struct foo const'}}
|
||||
|
|
|
@ -29,3 +29,14 @@ template<> class A<float, FLOAT>;
|
|||
template<> class A<FLOAT, float> { }; // expected-error{{redefinition}}
|
||||
|
||||
template<> class A<float, int> { }; // expected-error{{redefinition}}
|
||||
|
||||
template<typename T, typename U = int> class X;
|
||||
|
||||
template <> class X<int, int> { int foo(); }; // #1
|
||||
template <> class X<float> { int bar(); }; // #2
|
||||
|
||||
typedef int int_type;
|
||||
void testme(X<int_type> *x1, X<float, int> *x2) {
|
||||
x1->foo(); // okay: refers to #1
|
||||
x2->bar(); // okay: refers to #2
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue