diff options
author | George Burgess IV <george.burgess.iv@gmail.com> | 2016-07-21 03:28:13 +0000 |
---|---|---|
committer | George Burgess IV <george.burgess.iv@gmail.com> | 2016-07-21 03:28:13 +0000 |
commit | 92b43a462e141fac169a162616f464000633cece (patch) | |
tree | c062a54909113e4dcee4b6a59a002f7bef8fd77c /clang/lib | |
parent | 7efa5e4b5f61b822dfcd52b7220c209b8044ca1d (diff) | |
download | bcm5719-llvm-92b43a462e141fac169a162616f464000633cece.tar.gz bcm5719-llvm-92b43a462e141fac169a162616f464000633cece.zip |
[Sema] Fix PR28623.
In atomic builtins, we assumed that the LValue conversion on the first
argument would succeed. So, we would crash given code like:
```
void ovl(char);
void ovl(int);
__atomic_store_n(ovl, 0, 0);
```
This patch makes us not assume that said conversion is successful. :)
llvm-svn: 276232
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 7a99fc83830..6a4f65adb88 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -2398,7 +2398,11 @@ ExprResult Sema::SemaAtomicOpsOverloaded(ExprResult TheCallResult, // Inspect the first argument of the atomic operation. Expr *Ptr = TheCall->getArg(0); - Ptr = DefaultFunctionArrayLvalueConversion(Ptr).get(); + ExprResult ConvertedPtr = DefaultFunctionArrayLvalueConversion(Ptr); + if (ConvertedPtr.isInvalid()) + return ExprError(); + + Ptr = ConvertedPtr.get(); const PointerType *pointerType = Ptr->getType()->getAs<PointerType>(); if (!pointerType) { Diag(DRE->getLocStart(), diag::err_atomic_builtin_must_be_pointer) |