]> granicus.if.org Git - clang/commitdiff
Profiling the pointer of a canonical type is sufficient to uniquely identify the...
authorDouglas Gregor <dgregor@apple.com>
Tue, 28 Jul 2009 15:32:17 +0000 (15:32 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 28 Jul 2009 15:32:17 +0000 (15:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77321 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/StmtProfile.cpp

index fe8d1b716bc16703edc6b0f8231f1861fde46c12..af2b934125dabb45a8d29f6ec5b59376d03a0f69 100644 (file)
@@ -272,21 +272,6 @@ void StmtProfiler::VisitCompoundLiteralExpr(CompoundLiteralExpr *S) {
   ID.AddBoolean(S->isFileScope());
 }
 
-void StmtProfiler::VisitDecl(Decl *D) {
-  if (Canonical) {
-    if (NonTypeTemplateParmDecl *NTTP 
-          = dyn_cast_or_null<NonTypeTemplateParmDecl>(D)) {
-      ID.AddInteger(NTTP->getDepth());
-      ID.AddInteger(NTTP->getIndex());
-      return;
-    }
-
-    // FIXME: Other template template parameters?
-  }
-  
-  ID.AddPointer(D? D->getCanonicalDecl() : 0);
-}
-
 void StmtProfiler::VisitCastExpr(CastExpr *S) {
   VisitExpr(S);
 }
@@ -604,17 +589,25 @@ void StmtProfiler::VisitObjCIsaExpr(ObjCIsaExpr *S) {
   ID.AddBoolean(S->isArrow());
 }
 
-void StmtProfiler::VisitType(QualType T) {
+void StmtProfiler::VisitDecl(Decl *D) {
   if (Canonical) {
-    if (const TemplateTypeParmType *TTP = T->getAs<TemplateTypeParmType>()) {
-      ID.AddInteger(TTP->getDepth());
-      ID.AddInteger(TTP->getIndex());
+    if (NonTypeTemplateParmDecl *NTTP 
+        = dyn_cast_or_null<NonTypeTemplateParmDecl>(D)) {
+      ID.AddInteger(NTTP->getDepth());
+      ID.AddInteger(NTTP->getIndex());
       return;
     }
     
-    T = Context.getCanonicalType(T);
+    // FIXME: Template template parameters?
   }
   
+  ID.AddPointer(D? D->getCanonicalDecl() : 0);
+}
+
+void StmtProfiler::VisitType(QualType T) {
+  if (Canonical)
+    T = Context.getCanonicalType(T);
+  
   ID.AddPointer(T.getAsOpaquePtr());
 }