aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/AST/Attr.h20
-rw-r--r--include/clang/AST/Type.h1
-rw-r--r--lib/CodeGen/CGExpr.cpp12
-rw-r--r--lib/Sema/SemaDeclAttr.cpp33
-rw-r--r--lib/Sema/SemaType.cpp9
5 files changed, 19 insertions, 56 deletions
diff --git a/include/clang/AST/Attr.h b/include/clang/AST/Attr.h
index 8d4e1090cf..b2c5c23a4f 100644
--- a/include/clang/AST/Attr.h
+++ b/include/clang/AST/Attr.h
@@ -41,7 +41,6 @@ public:
NonNull,
NoReturn,
NoThrow,
- ObjCGC,
ObjCNSObject,
ObjCException,
Overloadable, // Clang-specific
@@ -429,25 +428,6 @@ public:
static bool classof(const TransparentUnionAttr *A) { return true; }
};
-class ObjCGCAttr : public Attr {
-public:
- enum GCAttrTypes {
- Weak = 0,
- Strong
- };
-private:
- GCAttrTypes GCAttrType;
-public:
- ObjCGCAttr(GCAttrTypes t) : Attr(ObjCGC), GCAttrType(t) {}
-
- GCAttrTypes getType() const { return GCAttrType; }
-
- // Implement isa/cast/dyncast/etc.
-
- static bool classof(const Attr *A) { return A->getKind() == ObjCGC; }
- static bool classof(const ObjCGCAttr *A) { return true; }
-};
-
class ObjCNSObjectAttr : public Attr {
// Implement isa/cast/dyncast/etc.
public:
diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h
index 909f395791..fdf79dbd37 100644
--- a/include/clang/AST/Type.h
+++ b/include/clang/AST/Type.h
@@ -29,7 +29,6 @@ using llvm::dyn_cast_or_null;
namespace clang {
class ASTContext;
class Type;
- class ObjCGCAttr;
class TypedefDecl;
class TemplateDecl;
class TemplateTypeParmDecl;
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index eed9ed7729..4e60cc518b 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -609,12 +609,16 @@ void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src,
static void SetVarDeclObjCAttribute(ASTContext &Ctx, const Decl *VD,
const QualType &Ty, LValue &LV)
{
+#if 0
+// FIXME. ObjCGCAttr no more.
if (const ObjCGCAttr *A = VD->getAttr<ObjCGCAttr>()) {
ObjCGCAttr::GCAttrTypes attrType = A->getType();
LValue::SetObjCType(attrType == ObjCGCAttr::Weak,
attrType == ObjCGCAttr::Strong, LV);
}
- else if (Ctx.getLangOptions().ObjC1 &&
+ else
+#endif
+ if (Ctx.getLangOptions().ObjC1 &&
Ctx.getLangOptions().getGCMode() != LangOptions::NonGC) {
// Default behavious under objective-c's gc is for objective-c pointers
// be treated as though they were declared as __strong.
@@ -925,12 +929,16 @@ LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue,
LValue LV =
LValue::MakeAddr(V,
Field->getType().getCVRQualifiers()|CVRQualifiers);
+#if 0
+// FIXME. ObjCGCAttr is no more.
if (const ObjCGCAttr *A = Field->getAttr<ObjCGCAttr>()) {
ObjCGCAttr::GCAttrTypes attrType = A->getType();
// __weak attribute on a field is ignored.
LValue::SetObjCType(false, attrType == ObjCGCAttr::Strong, LV);
}
- else if (CGM.getLangOptions().ObjC1 &&
+ else
+#endif
+ if (CGM.getLangOptions().ObjC1 &&
CGM.getLangOptions().getGCMode() != LangOptions::NonGC) {
QualType ExprTy = Field->getType();
if (getContext().isObjCObjectPointerType(ExprTy))
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp
index c4caec4d42..a385d97f68 100644
--- a/lib/Sema/SemaDeclAttr.cpp
+++ b/lib/Sema/SemaDeclAttr.cpp
@@ -568,35 +568,6 @@ static void HandleVisibilityAttr(Decl *d, const AttributeList &Attr, Sema &S) {
d->addAttr(new VisibilityAttr(type));
}
-static void HandleObjCGCAttr(Decl *D, const AttributeList &Attr, Sema &S) {
- if (!Attr.getParameterName()) {
- S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_not_string)
- << "objc_gc" << 1;
- return;
- }
-
- if (Attr.getNumArgs() != 0) {
- S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 1;
- return;
- }
-
- ObjCGCAttr::GCAttrTypes type;
- if (Attr.getParameterName()->isStr("weak")) {
- if (isa<FieldDecl>(D) && !isa<ObjCIvarDecl>(D))
- S.Diag(Attr.getLoc(), diag::warn_attribute_weak_on_field);
- type = ObjCGCAttr::Weak;
- }
- else if (Attr.getParameterName()->isStr("strong"))
- type = ObjCGCAttr::Strong;
- else {
- S.Diag(Attr.getLoc(), diag::warn_attribute_type_not_supported)
- << "objc_gc" << Attr.getParameterName();
- return;
- }
-
- D->addAttr(new ObjCGCAttr(type));
-}
-
static void HandleObjCExceptionAttr(Decl *D, const AttributeList &Attr,
Sema &S) {
if (Attr.getNumArgs() != 0) {
@@ -1391,7 +1362,8 @@ static void ProcessDeclAttribute(Decl *D, const AttributeList &Attr, Sema &S) {
switch (Attr.getKind()) {
case AttributeList::AT_IBOutlet: HandleIBOutletAttr (D, Attr, S); break;
case AttributeList::AT_address_space:
- // Ignore this, this is a type attribute, handled by ProcessTypeAttributes.
+ case AttributeList::AT_objc_gc:
+ // Ignore these, these are type attributes, handled by ProcessTypeAttributes.
break;
case AttributeList::AT_alias: HandleAliasAttr (D, Attr, S); break;
case AttributeList::AT_aligned: HandleAlignedAttr (D, Attr, S); break;
@@ -1426,7 +1398,6 @@ static void ProcessDeclAttribute(Decl *D, const AttributeList &Attr, Sema &S) {
case AttributeList::AT_transparent_union:
HandleTransparentUnionAttr(D, Attr, S);
break;
- case AttributeList::AT_objc_gc: HandleObjCGCAttr (D, Attr, S); break;
case AttributeList::AT_objc_exception:
HandleObjCExceptionAttr(D, Attr, S);
break;
diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp
index 677f994cac..96800dd4d1 100644
--- a/lib/Sema/SemaType.cpp
+++ b/lib/Sema/SemaType.cpp
@@ -779,15 +779,20 @@ static void HandleAddressSpaceTypeAttribute(QualType &Type,
/// specified type. The attribute contains 1 argument, weak or strong.
static void HandleObjCGCTypeAttribute(QualType &Type,
const AttributeList &Attr, Sema &S){
- // FIXME. Needs more work for this to make sense.
+ // FIXME. change error code.
if (Type.getObjCGCAttr() != QualType::GCNone) {
S.Diag(Attr.getLoc(), diag::err_attribute_address_multiple_qualifiers);
return;
}
// Check the attribute arguments.
+ if (!Attr.getParameterName()) {
+ S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_not_string)
+ << "objc_gc" << 1;
+ return;
+ }
QualType::GCAttrTypes attr;
- if (!Attr.getParameterName() || Attr.getNumArgs() != 0) {
+ if (Attr.getNumArgs() != 0) {
S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 1;
return;
}