summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaStmtAsm.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-09-04 22:16:48 +0000
committerHans Wennborg <hans@hanshq.net>2014-09-04 22:16:48 +0000
commit93dbeae0f7345b34080082a17fd0568aa2afe292 (patch)
tree3757ccc988400b9c48aa0b7e668a11aac9c5835f /clang/lib/Sema/SemaStmtAsm.cpp
parentd62cdd2c14c481e6d3e7fdebc17baba2ba447b24 (diff)
downloadbcm5719-llvm-93dbeae0f7345b34080082a17fd0568aa2afe292.tar.gz
bcm5719-llvm-93dbeae0f7345b34080082a17fd0568aa2afe292.zip
Don't allow inline asm statements to reference parameters in naked functions
Differential Revision: http://reviews.llvm.org/D5183 llvm-svn: 217200
Diffstat (limited to 'clang/lib/Sema/SemaStmtAsm.cpp')
-rw-r--r--clang/lib/Sema/SemaStmtAsm.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp
index 47a7672ae19..989999f18d9 100644
--- a/clang/lib/Sema/SemaStmtAsm.cpp
+++ b/clang/lib/Sema/SemaStmtAsm.cpp
@@ -405,6 +405,19 @@ ExprResult Sema::LookupInlineAsmIdentifier(CXXScopeSpec &SS,
Result = CheckPlaceholderExpr(Result.get());
if (!Result.isUsable()) return Result;
+ // Referring to parameters is not allowed in naked functions.
+ if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Result.get())) {
+ if (ParmVarDecl *Parm = dyn_cast<ParmVarDecl>(DRE->getDecl())) {
+ if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Parm->getDeclContext())) {
+ if (Func->hasAttr<NakedAttr>()) {
+ Diag(Id.getLocStart(), diag::err_asm_naked_parm_ref);
+ Diag(Func->getAttr<NakedAttr>()->getLocation(), diag::note_attribute);
+ return ExprError();
+ }
+ }
+ }
+ }
+
QualType T = Result.get()->getType();
// For now, reject dependent types.
OpenPOWER on IntegriCloud