[cfe-commits] r47197 - in /cfe/trunk: Sema/Sema.h Sema/SemaDecl.cpp include/clang/Basic/DiagnosticKinds.def
Anders Carlsson
andersca at mac.com
Fri Feb 15 16:29:18 PST 2008
Author: andersca
Date: Fri Feb 15 18:29:18 2008
New Revision: 47197
URL: http://llvm.org/viewvc/llvm-project?rev=47197&view=rev
Log:
Handle packed attribute correctly
Modified:
cfe/trunk/Sema/Sema.h
cfe/trunk/Sema/SemaDecl.cpp
cfe/trunk/include/clang/Basic/DiagnosticKinds.def
Modified: cfe/trunk/Sema/Sema.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/Sema.h?rev=47197&r1=47196&r2=47197&view=diff
==============================================================================
--- cfe/trunk/Sema/Sema.h (original)
+++ cfe/trunk/Sema/Sema.h Fri Feb 15 18:29:18 2008
@@ -267,7 +267,8 @@
void HandleOCUVectorTypeAttribute(TypedefDecl *d, AttributeList *rawAttr);
void HandleAlignedAttribute(Decl *d, AttributeList *rawAttr);
-
+ void HandlePackedAttribute(Decl *d, AttributeList *rawAttr);
+
void WarnUndefinedMethod(SourceLocation ImpLoc, ObjCMethodDecl *method,
bool &IncompleteImpl);
Modified: cfe/trunk/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/SemaDecl.cpp?rev=47197&r1=47196&r2=47197&view=diff
==============================================================================
--- cfe/trunk/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/Sema/SemaDecl.cpp Fri Feb 15 18:29:18 2008
@@ -1242,6 +1242,7 @@
S->AddDecl(New);
}
+ HandleDeclAttributes(New, Attr, 0);
return New;
}
@@ -1300,6 +1301,9 @@
else
assert(0 && "Sema::ActOnField(): Unknown TagDecl");
+ HandleDeclAttributes(NewFD, D.getDeclSpec().getAttributes(),
+ D.getAttributes());
+
if (D.getInvalidType() || InvalidDecl)
NewFD->setInvalidDecl();
return NewFD;
@@ -1772,10 +1776,11 @@
if (!newType.isNull()) // install the new addr spaced type into the decl
vDecl->setType(newType);
}
- } else if (attrLen == 7 && !memcmp(attrName, "aligned", 7)) {
- HandleAlignedAttribute(New, rawAttr);
- }
-
+ } else if (attrLen == 7 && !memcmp(attrName, "aligned", 7))
+ HandleAlignedAttribute(New, rawAttr);
+ else if (attrLen == 6 && !memcmp(attrName, "packed", 6))
+ HandlePackedAttribute(New, rawAttr);
+
// FIXME: add other attributes...
}
@@ -1920,6 +1925,32 @@
return Context.getVectorType(curType, vectorSize/typeSize);
}
+void Sema::HandlePackedAttribute(Decl *d, AttributeList *rawAttr)
+{
+ // check the attribute arguments.
+ if (rawAttr->getNumArgs() > 0) {
+ Diag(rawAttr->getAttributeLoc(), diag::err_attribute_wrong_number_arguments,
+ std::string("0"));
+ return;
+ }
+
+ if (TagDecl *TD = dyn_cast<TagDecl>(d))
+ TD->addAttr(new PackedAttr);
+ else if (FieldDecl *FD = dyn_cast<FieldDecl>(d)) {
+ // If the alignment is less than or equal to 8 bits, the packed attribute
+ // has no effect.
+ if (Context.getTypeAlign(FD->getType(), SourceLocation()) <= 8)
+ Diag(rawAttr->getAttributeLoc(),
+ diag::warn_attribute_ignored_for_field_of_type,
+ rawAttr->getAttributeName()->getName(),
+ FD->getType().getAsString());
+ else
+ TD->addAttr(new PackedAttr);
+ } else
+ Diag(rawAttr->getAttributeLoc(), diag::warn_attribute_ignored,
+ rawAttr->getAttributeName()->getName());
+}
+
void Sema::HandleAlignedAttribute(Decl *d, AttributeList *rawAttr)
{
// check the attribute arguments.
Modified: cfe/trunk/include/clang/Basic/DiagnosticKinds.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticKinds.def?rev=47197&r1=47196&r2=47197&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticKinds.def (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticKinds.def Fri Feb 15 18:29:18 2008
@@ -579,6 +579,10 @@
"vector component access limited to variables")
DIAG(err_attribute_address_space_not_int, ERROR,
"address space attribute requires an integer constant")
+DIAG(warn_attribute_ignored, WARNING,
+ "'%0' attribute ignored")
+DIAG(warn_attribute_ignored_for_field_of_type, WARNING,
+ "'%0' attribute ignored for field of type '%1'")
// Function Parameter Semantic Analysis.
DIAG(err_param_with_void_type, ERROR,
More information about the cfe-commits
mailing list