]> granicus.if.org Git - clang/commitdiff
Use RequireCompleteType() instead of isIncompleteType().
authorBill Wendling <isanbard@gmail.com>
Fri, 22 Mar 2013 21:33:46 +0000 (21:33 +0000)
committerBill Wendling <isanbard@gmail.com>
Fri, 22 Mar 2013 21:33:46 +0000 (21:33 +0000)
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>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177768 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaStmtAsm.cpp
test/CodeGen/x86_32-inline-asm.c

index 3e9606e467cd4fec1ee0950286b5a619a7d04b28..95964e20a7ea5b4cbe4eb72450238914a16370a8 100644 (file)
@@ -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);
index 527ad855814c83335d2f3c129206c06f6235dc66..aebc4e4a0684d1a52614517b1719abaa92b9d45a 100644 (file)
@@ -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));
+}