summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2015-12-30 03:33:22 +0000
committerChandler Carruth <chandlerc@gmail.com>2015-12-30 03:33:22 +0000
commitb9518f8f86f8f729a9e6b9771b0d08b39d4e580d (patch)
treedef9a799cf2e5dc30eb7db52384fc8188e8a466c
parent21c9060e61e265b925a20930687b99f721fb11f6 (diff)
downloadbcm5719-llvm-b9518f8f86f8f729a9e6b9771b0d08b39d4e580d.tar.gz
bcm5719-llvm-b9518f8f86f8f729a9e6b9771b0d08b39d4e580d.zip
[ptr-traits] Move a class definition up to the top of this header so it
can be referenced as part of a PointerIntPair. This is part of a series of patches to allow LLVM to check for complete pointee types when computing its pointer traits. This is absolutely necessary to get correct (or reproducible) results for things like how many low bits are guaranteed to be zero. llvm-svn: 256613
-rw-r--r--clang/include/clang/Analysis/ProgramPoint.h49
1 files changed, 24 insertions, 25 deletions
diff --git a/clang/include/clang/Analysis/ProgramPoint.h b/clang/include/clang/Analysis/ProgramPoint.h
index f87271550c2..6d816fd733e 100644
--- a/clang/include/clang/Analysis/ProgramPoint.h
+++ b/clang/include/clang/Analysis/ProgramPoint.h
@@ -33,8 +33,31 @@ namespace clang {
class AnalysisDeclContext;
class FunctionDecl;
class LocationContext;
-class ProgramPointTag;
+/// ProgramPoints can be "tagged" as representing points specific to a given
+/// analysis entity. Tags are abstract annotations, with an associated
+/// description and potentially other information.
+class ProgramPointTag {
+public:
+ ProgramPointTag(void *tagKind = nullptr) : TagKind(tagKind) {}
+ virtual ~ProgramPointTag();
+ virtual StringRef getTagDescription() const = 0;
+
+protected:
+ /// Used to implement 'isKind' in subclasses.
+ const void *getTagKind() { return TagKind; }
+
+private:
+ const void *TagKind;
+};
+
+class SimpleProgramPointTag : public ProgramPointTag {
+ std::string Desc;
+public:
+ SimpleProgramPointTag(StringRef MsgProvider, StringRef Msg);
+ StringRef getTagDescription() const override;
+};
+
class ProgramPoint {
public:
enum Kind { BlockEdgeKind,
@@ -643,30 +666,6 @@ private:
}
};
-/// ProgramPoints can be "tagged" as representing points specific to a given
-/// analysis entity. Tags are abstract annotations, with an associated
-/// description and potentially other information.
-class ProgramPointTag {
-public:
- ProgramPointTag(void *tagKind = nullptr) : TagKind(tagKind) {}
- virtual ~ProgramPointTag();
- virtual StringRef getTagDescription() const = 0;
-
-protected:
- /// Used to implement 'isKind' in subclasses.
- const void *getTagKind() { return TagKind; }
-
-private:
- const void *TagKind;
-};
-
-class SimpleProgramPointTag : public ProgramPointTag {
- std::string Desc;
-public:
- SimpleProgramPointTag(StringRef MsgProvider, StringRef Msg);
- StringRef getTagDescription() const override;
-};
-
} // end namespace clang
OpenPOWER on IntegriCloud