summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-11-01 21:51:42 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-11-01 21:51:42 +0000
commit375584c7ebcf78d4364e71363a35be230b93ea4d (patch)
tree2bf8b7abf9bbce6a2077cd684c43be92e18e4a76 /clang
parentd7a824006e794bf10661a5d211c186c4f0c5ba55 (diff)
downloadbcm5719-llvm-375584c7ebcf78d4364e71363a35be230b93ea4d.tar.gz
bcm5719-llvm-375584c7ebcf78d4364e71363a35be230b93ea4d.zip
Clean up temporaries created by an asm statement. Fixes rdar://8540491
llvm-svn: 117961
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Parse/ParseStmt.cpp1
-rw-r--r--clang/test/SemaCXX/asm.cpp13
2 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp
index d340d574d4d..76956732d49 100644
--- a/clang/lib/Parse/ParseStmt.cpp
+++ b/clang/lib/Parse/ParseStmt.cpp
@@ -1458,6 +1458,7 @@ bool Parser::ParseAsmOperandsOpt(llvm::SmallVectorImpl<IdentifierInfo *> &Names,
SkipUntil(tok::r_paren);
return true;
}
+ Res = Actions.MakeFullExpr(Res.get()).release();
Exprs.push_back(Res.release());
// Eat the comma and continue parsing if it exists.
if (Tok.isNot(tok::comma)) return false;
diff --git a/clang/test/SemaCXX/asm.cpp b/clang/test/SemaCXX/asm.cpp
new file mode 100644
index 00000000000..cc2e6e75ca1
--- /dev/null
+++ b/clang/test/SemaCXX/asm.cpp
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+struct A
+{
+ ~A();
+};
+int foo(A);
+
+void bar()
+{
+ A a;
+ asm("" : : "r"(foo(a)) ); // rdar://8540491
+}
OpenPOWER on IntegriCloud