From: Argyrios Kyrtzidis Date: Mon, 1 Nov 2010 21:51:42 +0000 (+0000) Subject: Clean up temporaries created by an asm statement. Fixes rdar://8540491 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=65e7a6b5f077827964570a7fdabffa62fcc2319e;p=clang Clean up temporaries created by an asm statement. Fixes rdar://8540491 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117961 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp index d340d574d4..76956732d4 100644 --- a/lib/Parse/ParseStmt.cpp +++ b/lib/Parse/ParseStmt.cpp @@ -1458,6 +1458,7 @@ bool Parser::ParseAsmOperandsOpt(llvm::SmallVectorImpl &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/test/SemaCXX/asm.cpp b/test/SemaCXX/asm.cpp new file mode 100644 index 0000000000..cc2e6e75ca --- /dev/null +++ b/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 +}