diff options
author | Reid Kleckner <rnk@google.com> | 2018-03-08 00:14:34 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2018-03-08 00:14:34 +0000 |
commit | c2fd3529630d24e3b561f8d6dd5fca282616ad34 (patch) | |
tree | a6205b2ebc5e05721ab89ca9ab401ccc90655fa6 /clang/lib/Sema/SemaStmtAsm.cpp | |
parent | c4a13015fd6b83b802cd830f8adc9693d6392c48 (diff) | |
download | bcm5719-llvm-c2fd3529630d24e3b561f8d6dd5fca282616ad34.tar.gz bcm5719-llvm-c2fd3529630d24e3b561f8d6dd5fca282616ad34.zip |
[Sema] Make getCurFunction() return null outside function parsing
Summary:
Before this patch, Sema pre-allocated a FunctionScopeInfo and kept it in
the first, always present element of the FunctionScopes stack. This
meant that Sema::getCurFunction would return a pointer to this
pre-allocated object when parsing code outside a function body. This is
pretty much always a bug, so this patch moves the pre-allocated object
into a separate unique_ptr. This should make bugs like PR36536 a lot
more obvious.
As you can see from this patch, there were a number of places that
unconditionally assumed they were always called inside a function.
However, there are also many places that null checked the result of
getCurFunction(), so I think this is a reasonable direction.
Reviewers: rsmith
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D44039
llvm-svn: 326965
Diffstat (limited to 'clang/lib/Sema/SemaStmtAsm.cpp')
-rw-r--r-- | clang/lib/Sema/SemaStmtAsm.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp index fc1cc7bbe54..cad398a13d9 100644 --- a/clang/lib/Sema/SemaStmtAsm.cpp +++ b/clang/lib/Sema/SemaStmtAsm.cpp @@ -793,7 +793,7 @@ StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, ArrayRef<Expr*> Exprs, SourceLocation EndLoc) { bool IsSimple = (NumOutputs != 0 || NumInputs != 0); - getCurFunction()->setHasBranchProtectedScope(); + setFunctionHasBranchProtectedScope(); MSAsmStmt *NS = new (Context) MSAsmStmt(Context, AsmLoc, LBraceLoc, IsSimple, /*IsVolatile*/ true, AsmToks, NumOutputs, NumInputs, |