[PATCH] D70257: [BPF] Restrict preserve_access_index attribute to C only
Yonghong Song via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 14 14:16:50 PST 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rGdd16b3fe2559: [BPF] Restrict preserve_access_index attribute to C only (authored by yonghong-song).
Changed prior to commit:
https://reviews.llvm.org/D70257?vs=229355&id=229406#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70257/new/
https://reviews.llvm.org/D70257
Files:
clang/include/clang/Basic/Attr.td
clang/lib/CodeGen/CGExpr.cpp
clang/test/Sema/bpf-attr-preserve-access-index.cpp
Index: clang/test/Sema/bpf-attr-preserve-access-index.cpp
===================================================================
--- /dev/null
+++ clang/test/Sema/bpf-attr-preserve-access-index.cpp
@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 -x c++ -triple bpf-pc-linux-gnu -dwarf-version=4 -fsyntax-only -verify %s
+
+#define __reloc__ __attribute__((preserve_access_index))
+
+struct t1 {
+ int a;
+ int b[4];
+ int c:1;
+} __reloc__; // expected-warning {{'preserve_access_index' attribute ignored}}
Index: clang/lib/CodeGen/CGExpr.cpp
===================================================================
--- clang/lib/CodeGen/CGExpr.cpp
+++ clang/lib/CodeGen/CGExpr.cpp
@@ -3408,10 +3408,6 @@
if (!ArrayBase || !CGF.getDebugInfo())
return false;
- const auto *ImplicitCast = dyn_cast<ImplicitCastExpr>(ArrayBase);
- if (!ImplicitCast)
- return false;
-
// Only support base as either a MemberExpr or DeclRefExpr.
// DeclRefExpr to cover cases like:
// struct s { int a; int b[10]; };
@@ -3419,39 +3415,24 @@
// p[1].a
// p[1] will generate a DeclRefExpr and p[1].a is a MemberExpr.
// p->b[5] is a MemberExpr example.
- const Expr *E = ImplicitCast->getSubExpr();
- const auto *MemberCast = dyn_cast<MemberExpr>(E);
- if (MemberCast)
- return MemberCast->getMemberDecl()->hasAttr<BPFPreserveAccessIndexAttr>();
-
- const auto *DeclRefCast = dyn_cast<DeclRefExpr>(E);
- if (DeclRefCast) {
- const VarDecl *VarDef = dyn_cast<VarDecl>(DeclRefCast->getDecl());
+ const Expr *E = ArrayBase->IgnoreImpCasts();
+ if (const auto *ME = dyn_cast<MemberExpr>(E))
+ return ME->getMemberDecl()->hasAttr<BPFPreserveAccessIndexAttr>();
+
+ if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {
+ const auto *VarDef = dyn_cast<VarDecl>(DRE->getDecl());
if (!VarDef)
return false;
- const auto *PtrT = dyn_cast<PointerType>(VarDef->getType().getTypePtr());
+ const auto *PtrT = VarDef->getType()->getAs<PointerType>();
if (!PtrT)
return false;
- const auto *PointeeT = PtrT->getPointeeType().getTypePtr();
-
- // Peel off typedef's
- const auto *TypedefT = dyn_cast<TypedefType>(PointeeT);
- while (TypedefT) {
- PointeeT = TypedefT->desugar().getTypePtr();
- TypedefT = dyn_cast<TypedefType>(PointeeT);
- }
-
- // Not a typedef any more, it should be an elaborated type.
- const auto ElaborateT = dyn_cast<ElaboratedType>(PointeeT);
- if (!ElaborateT)
- return false;
- const auto *RecT = dyn_cast<RecordType>(ElaborateT->desugar().getTypePtr());
- if (!RecT)
- return false;
-
- return RecT->getDecl()->hasAttr<BPFPreserveAccessIndexAttr>();
+ const auto *PointeeT = PtrT->getPointeeType()
+ ->getUnqualifiedDesugaredType();
+ if (const auto *RecT = dyn_cast<RecordType>(PointeeT))
+ return RecT->getDecl()->hasAttr<BPFPreserveAccessIndexAttr>();
+ return false;
}
return false;
Index: clang/include/clang/Basic/Attr.td
===================================================================
--- clang/include/clang/Basic/Attr.td
+++ clang/include/clang/Basic/Attr.td
@@ -1584,6 +1584,7 @@
let Spellings = [Clang<"preserve_access_index">];
let Subjects = SubjectList<[Record], ErrorDiag>;
let Documentation = [BPFPreserveAccessIndexDocs];
+ let LangOpts = [COnly];
}
def WebAssemblyImportModule : InheritableAttr,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70257.229406.patch
Type: text/x-patch
Size: 3396 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191114/2151acf1/attachment.bin>
More information about the cfe-commits
mailing list