diff options
author | Weiming Zhao <weimingz@codeaurora.org> | 2015-02-03 22:35:58 +0000 |
---|---|---|
committer | Weiming Zhao <weimingz@codeaurora.org> | 2015-02-03 22:35:58 +0000 |
commit | 71ac240620c4fedb6e49c302c490e99bb2d37eb4 (patch) | |
tree | 7e77100160781705607098aa9d51d08dfffc1970 /clang/lib/Sema | |
parent | ab1dc2d54db5fc2ad4ee748745420eac844a5ea3 (diff) | |
download | bcm5719-llvm-71ac240620c4fedb6e49c302c490e99bb2d37eb4.tar.gz bcm5719-llvm-71ac240620c4fedb6e49c302c490e99bb2d37eb4.zip |
Diagnose CXX 'this' pointer reference in funcs with naked attr
Clang asserts for this pointer reference in asms of naked functions.
This patch diagnoses if this pointer reference is used.
Differential Revision: http://reviews.llvm.org/D7329
llvm-svn: 228052
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/SemaStmtAsm.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp index 0d32581e8da..1beac366c50 100644 --- a/clang/lib/Sema/SemaStmtAsm.cpp +++ b/clang/lib/Sema/SemaStmtAsm.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "clang/Sema/SemaInternal.h" +#include "clang/AST/ExprCXX.h" #include "clang/AST/RecordLayout.h" #include "clang/AST/TypeLoc.h" #include "clang/Basic/TargetInfo.h" @@ -86,6 +87,11 @@ static bool CheckNakedParmReference(Expr *E, Sema &S) { WorkList.push_back(E); while (WorkList.size()) { Expr *E = WorkList.pop_back_val(); + if (isa<CXXThisExpr>(E)) { + S.Diag(E->getLocStart(), diag::err_asm_naked_this_ref); + S.Diag(Func->getAttr<NakedAttr>()->getLocation(), diag::note_attribute); + return true; + } if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) { if (isa<ParmVarDecl>(DRE->getDecl())) { S.Diag(DRE->getLocStart(), diag::err_asm_naked_parm_ref); |