diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-03-22 21:33:46 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-03-22 21:33:46 +0000 |
commit | b3b4a371387b68f3c2da0914fbac989e3e49572a (patch) | |
tree | d4a48a299c839cca2413ae31a5a6664d2343b380 | |
parent | 21c29e5713f3345773cd301c00c9f5b2b7f1ff53 (diff) | |
download | bcm5719-llvm-b3b4a371387b68f3c2da0914fbac989e3e49572a.tar.gz bcm5719-llvm-b3b4a371387b68f3c2da0914fbac989e3e49572a.zip |
Use RequireCompleteType() instead of isIncompleteType().
isIncompleteType() returns true or false for template types depending on whether
the type is instantiated yet. In this context, that's arbitrary. The better way
to check for a complete type is RequireCompleteType().
Thanks to Eli Friedman for noticing this!
<rdar://problem/12700799>
llvm-svn: 177768
-rw-r--r-- | clang/lib/Sema/SemaStmtAsm.cpp | 4 | ||||
-rw-r--r-- | clang/test/CodeGen/x86_32-inline-asm.c | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp index 3e9606e467c..95964e20a7e 100644 --- a/clang/lib/Sema/SemaStmtAsm.cpp +++ b/clang/lib/Sema/SemaStmtAsm.cpp @@ -181,7 +181,9 @@ StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, InputConstraintInfos.push_back(Info); const Type *Ty = Exprs[i]->getType().getTypePtr(); - if (Ty->isDependentType() || Ty->isIncompleteType()) + if (Ty->isDependentType() || + RequireCompleteType(InputExpr->getLocStart(), + Exprs[i]->getType(), 0)) continue; unsigned Size = Context.getTypeSize(Ty); diff --git a/clang/test/CodeGen/x86_32-inline-asm.c b/clang/test/CodeGen/x86_32-inline-asm.c index 527ad855814..aebc4e4a068 100644 --- a/clang/test/CodeGen/x86_32-inline-asm.c +++ b/clang/test/CodeGen/x86_32-inline-asm.c @@ -7,7 +7,7 @@ typedef u_int32_t uint32_t; typedef unsigned long long u_int64_t; typedef u_int64_t uint64_t; -int func() { +int func1() { // Error out if size is > 32-bits. uint32_t msr = 0x8b; uint64_t val = 0; @@ -22,3 +22,10 @@ int func() { unsigned int port; __asm__ volatile("outb %0, %w1" : : "a" (data), "Nd" (port)); // No error expected. } + +struct S; +void func2(struct S *s) { + __asm__ volatile("" + : + : "a" (*s)); +} |