forked from OSchip/llvm-project
Fix PR clang/3175: CheckAddressOfOperand does not handle references to class vars
llvm-svn: 60849
This commit is contained in:
parent
872ffce257
commit
9aa8b55d10
|
@ -2876,8 +2876,11 @@ QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) {
|
|||
<< "register variable" << op->getSourceRange();
|
||||
return QualType();
|
||||
}
|
||||
} else if (isa<OverloadedFunctionDecl>(dcl))
|
||||
} else if (isa<OverloadedFunctionDecl>(dcl)) {
|
||||
return Context.OverloadTy;
|
||||
} else if (isa<FieldDecl>(dcl)) {
|
||||
// Okay: we can take the address of a field.
|
||||
}
|
||||
else
|
||||
assert(0 && "Unknown/unexpected decl type");
|
||||
}
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
// RUN: clang -fsyntax-only -verify %S
|
||||
// PR clang/3175
|
||||
|
||||
void bar(int*);
|
||||
|
||||
class c {
|
||||
int var;
|
||||
static int svar;
|
||||
void foo() {
|
||||
bar(&var);
|
||||
bar(&svar);
|
||||
}
|
||||
|
||||
static void wibble() {
|
||||
bar(&var); // expected-error{{invalid use of member 'var' in static member function}}
|
||||
bar(&svar);
|
||||
}
|
||||
};
|
||||
|
||||
enum E {
|
||||
Enumerator
|
||||
};
|
||||
|
||||
void test() {
|
||||
(void)&Enumerator; // expected-error{{address expression must be an lvalue or a function designator}}
|
||||
}
|
||||
|
||||
template<int N>
|
||||
void test2() {
|
||||
(void)&N; // expected-error{{address expression must be an lvalue or a function designator}}
|
||||
}
|
Loading…
Reference in New Issue