Handle CXXOperatorCallExpr when checking self referrnce during initialization of
class types. llvm-svn: 177987
This commit is contained in:
parent
9093e15066
commit
8fbd91d445
|
@ -7097,6 +7097,14 @@ namespace {
|
|||
Visit(Base);
|
||||
}
|
||||
|
||||
void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) {
|
||||
if (E->getNumArgs() > 0)
|
||||
if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E->getArg(0)))
|
||||
HandleDeclRefExpr(DRE);
|
||||
|
||||
Inherited::VisitCXXOperatorCallExpr(E);
|
||||
}
|
||||
|
||||
void VisitUnaryOperator(UnaryOperator *E) {
|
||||
// For POD record types, addresses of its own members are well-defined.
|
||||
if (E->getOpcode() == UO_AddrOf && isRecordType &&
|
||||
|
|
|
@ -496,3 +496,18 @@ namespace references {
|
|||
int &b;
|
||||
};
|
||||
}
|
||||
|
||||
namespace operators {
|
||||
struct A {
|
||||
A(bool);
|
||||
bool operator==(A);
|
||||
};
|
||||
|
||||
A makeA();
|
||||
|
||||
A a1 = a1 = makeA(); // expected-warning{{variable 'a1' is uninitialized when used within its own initialization}}
|
||||
A a2 = a2 == a1; // expected-warning{{variable 'a2' is uninitialized when used within its own initialization}}
|
||||
A a3 = a2 == a3; // expected-warning{{variable 'a3' is uninitialized when used within its own initialization}}
|
||||
|
||||
int x = x = 5;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue