public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo-x86 commit in dev-util/include-what-you-use/files: include-what-you-use-3.3-issue-110-elaboration.patch
@ 2013-09-27  9:54 Sergei Trofimovich (slyfox)
  0 siblings, 0 replies; only message in thread
From: Sergei Trofimovich (slyfox) @ 2013-09-27  9:54 UTC (permalink / raw
  To: gentoo-commits

slyfox      13/09/27 09:54:25

  Added:               
                        include-what-you-use-3.3-issue-110-elaboration.patch
  Log:
  A tool to find for exact includes used by C/C++ sources. Warns about not only missing but also redundant ones!
  
  (Portage version: 2.2.7/cvs/Linux x86_64, signed Manifest commit with key 611FF3AA)

Revision  Changes    Path
1.1                  dev-util/include-what-you-use/files/include-what-you-use-3.3-issue-110-elaboration.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-util/include-what-you-use/files/include-what-you-use-3.3-issue-110-elaboration.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-util/include-what-you-use/files/include-what-you-use-3.3-issue-110-elaboration.patch?rev=1.1&content-type=text/plain

Index: include-what-you-use-3.3-issue-110-elaboration.patch
===================================================================
Upstream-bug: http://code.google.com/p/include-what-you-use/issues/detail?id=110
Index: tests/elaboration-struct.h
===================================================================
--- tests/elaboration-struct.h	(revision 0)
+++ tests/elaboration-struct.h	(revision 0)
@@ -0,0 +1,10 @@
+//===--- elaboration-struct.h - test input file for iwyu ------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+struct ElaborationStruct {};

Property changes on: tests\elaboration-struct.h
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tests/elaboration.cc
===================================================================
--- tests/elaboration.cc	(revision 0)
+++ tests/elaboration.cc	(revision 0)
@@ -0,0 +1,79 @@
+//===--- elaboration.cc - test input file for iwyu ------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// Test that elaborated types are handled correctly.
+//
+// An elaborated type is a type prefixed by type kind, e.g. 'class Foo',
+// 'struct Bar' or 'enum Baz'.
+//
+// Clang considers namespace-qualified types elaborated as well, even if they
+// lack actual elaboration, e.g. 'ns::Foo'.
+
+
+#include "tests/elaboration-enum1.h"  // for ElaborationEnum1
+#include "tests/elaboration-enum2.h"  // for ElaborationEnum2
+
+// Make sure both elaborated and bare enums require the full type.
+void bare_enum(ElaborationEnum1 e);
+void elaborated_enum(enum ElaborationEnum2 e);
+
+// For C++ classes, a forward declaration should suffice for
+// bare type names and nothing should be necessary for elaborated ones.
+#include "tests/elaboration-class.h"
+
+void bare_class(ElaborationClass* c);
+void elaborated_class(class UnknownElaborationClass* c);
+
+// Structs should work like classes.
+#include "tests/elaboration-struct.h"
+
+void bare_struct(ElaborationStruct* s);
+void elaborated_struct(struct UnknownElaborationStruct* s);
+
+// And unions.
+#include "tests/elaboration-union.h"
+
+void bare_union(ElaborationUnion* u);
+void elaborated_union(union UnknownElaborationUnion* u);
+
+// Namespace-qualified types must be forward-declared even
+// if they are represented as elaborated types in Clang's AST. 
+#include "tests/elaboration-namespace.h"
+
+void namespace_qualified(Elaboration::Class* c);
+
+// We can use elaborated types for templates, too, but
+// they must also be forward-declared.
+struct Elaboration::Template<int, float>* namespace_qualified_template;
+
+/**** IWYU_SUMMARY
+
+tests/elaboration.cc should add these lines:
+class ElaborationClass;
+namespace Elaboration { class Class; }
+namespace Elaboration { template <typename T, typename U> struct Template; }
+struct ElaborationStruct;
+union ElaborationUnion;
+
+tests/elaboration.cc should remove these lines:
+- #include "tests/elaboration-class.h"  // lines XX-XX
+- #include "tests/elaboration-namespace.h"  // lines XX-XX
+- #include "tests/elaboration-struct.h"  // lines XX-XX
+- #include "tests/elaboration-union.h"  // lines XX-XX
+
+The full include-list for tests/elaboration.cc:
+#include "tests/elaboration-enum1.h"  // for ElaborationEnum1
+#include "tests/elaboration-enum2.h"  // for ElaborationEnum2
+class ElaborationClass;
+namespace Elaboration { class Class; }
+namespace Elaboration { template <typename T, typename U> struct Template; }
+struct ElaborationStruct;
+union ElaborationUnion;
+
+***** IWYU_SUMMARY */
Index: tests/elaboration-enum1.h
===================================================================
--- tests/elaboration-enum1.h	(revision 0)
+++ tests/elaboration-enum1.h	(revision 0)
@@ -0,0 +1,13 @@
+//===--- elaboration-enum1.h - test input file for iwyu -------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+enum ElaborationEnum1 {
+  EE1_First,
+  EE1_Second
+};

Property changes on: tests\elaboration-enum1.h
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tests/elaboration-class.h
===================================================================
--- tests/elaboration-class.h	(revision 0)
+++ tests/elaboration-class.h	(revision 0)
@@ -0,0 +1,10 @@
+//===--- elaboration-class.h - test input file for iwyu -------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+class ElaborationClass {};

Property changes on: tests\elaboration-class.h
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tests/badinc.cc
===================================================================
--- tests/badinc.cc	(revision 485)
+++ tests/badinc.cc	(working copy)
@@ -317,17 +317,12 @@
     // IWYU: I2_Class is...*badinc-i2.h.*for autocast
     // IWYU: I2_Class needs a declaration
     const I2_Class& i2,
-    const class I1_Class& elaborated_i1,
-    // IWYU: I2_Class is...*badinc-i2.h.*for autocast
-    const class I2_Class& elaborated_i2,
     // A subtle c++ point: forward-declaring is ok for i2b, because
     // you can't do implicit conversion to a non-const reference
     // (implicit conversion involves creating a temporary, which
     // doesn't bind to non-const references).
     // IWYU: I2_Class needs a declaration
     I2_Class& i2_nonconst,
-    class I2_Class& elaborated_i2_nonconst,
-    struct i3_ns1::i3_ns2::i3_ns3::I3_ForwardDeclareNamespaceStruct* i3_forward,
     // Forward-declaring is ok because we a const reference to a *pointer*.
     // IWYU: I2_Class needs a declaration
     I2_Class* const & i2_ptrref,
@@ -897,11 +892,6 @@
 // IWYU: I3_ForwardDeclareNamespaceTemplateStruct needs a declaration
 i3_ns1::i3_ns2::i3_ns3::I3_ForwardDeclareNamespaceTemplateStruct<H_Enum, 2>*
   i3_fdtns_struct;
-// Even with elaboration, we still need fwd decl.
-// IWYU: I3_ForwardDeclareNamespaceTemplateStruct needs a declaration
-struct i3_ns1::i3_ns2::i3_ns3::I3_ForwardDeclareNamespaceTemplateStruct<H_Enum,
-                                                                        3>*
-  i3_elaborated_fdtns_struct;
 
 // IWYU: I3_UnnamedNamespaceStruct needs a declaration
 i3_ns1::I3_UnnamedNamespaceStruct* i3_unnamed_namespace_struct;
Index: tests/elaboration-enum2.h
===================================================================
--- tests/elaboration-enum2.h	(revision 0)
+++ tests/elaboration-enum2.h	(revision 0)
@@ -0,0 +1,13 @@
+//===--- elaboration-enum2.h - test input file for iwyu -------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+enum ElaborationEnum2 {
+  EE2_First,
+  EE2_Second
+};

Property changes on: tests\elaboration-enum2.h
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tests/elaboration-union.h
===================================================================
--- tests/elaboration-union.h	(revision 0)
+++ tests/elaboration-union.h	(revision 0)
@@ -0,0 +1,10 @@
+//===--- elaboration-union.h - test input file for iwyu -------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+union ElaborationUnion {};

Property changes on: tests\elaboration-union.h
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tests/elaboration-namespace.h
===================================================================
--- tests/elaboration-namespace.h	(revision 0)
+++ tests/elaboration-namespace.h	(revision 0)
@@ -0,0 +1,18 @@
+//===--- elaboration-namespace.h - test input file for iwyu ---------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+namespace Elaboration {
+  class Class {};
+
+  template< typename T, typename U >
+  struct Template {
+    typedef T FirstType;
+    typedef U SecondType;
+  };
+}

Property changes on: tests\elaboration-namespace.h
___________________________________________________________________
Added: svn:eol-style
   + native

Index: iwyu.cc
===================================================================
--- iwyu.cc	(revision 485)
+++ iwyu.cc	(working copy)
@@ -166,6 +166,7 @@
 using clang::DeclContext;
 using clang::DeclRefExpr;
 using clang::ElaboratedType;
+using clang::EnumType;
 using clang::Expr;
 using clang::FileEntry;
 using clang::FriendDecl;
@@ -3454,6 +3455,7 @@
       preprocessor_info().FileInfoFor(CurrentFileEntry())->AddForwardDeclare(
           decl_to_fwd_declare, definitely_keep_fwd_decl);
     }
+
     return Base::VisitTagDecl(decl);
   }
 
@@ -3562,13 +3564,17 @@
     // If we're forward-declarable, then no complicated checking is
     // needed: just forward-declare.  If we're already elaborated
     // ('class Foo x') but not namespace-qualified ('class ns::Foo x')
-    // there's no need even to forward-declare!
+    // or an enum ('enum Foo x') there's no need even to forward-declare!
     if (CanForwardDeclareType(current_ast_node())) {
       current_ast_node()->set_in_forward_declare_context(true);
+
+      bool is_enum_type = current_ast_node()->GetAs<EnumType>();
       if (!IsElaborationNode(current_ast_node()->parent()) ||
-          IsNamespaceQualifiedNode(current_ast_node()->parent())) {
+          IsNamespaceQualifiedNode(current_ast_node()->parent()) ||
+          is_enum_type) {
         ReportDeclForwardDeclareUse(CurrentLoc(), type->getDecl());
       }
+
       return Base::VisitTagType(type);
     }
 





^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2013-09-27  9:54 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-27  9:54 [gentoo-commits] gentoo-x86 commit in dev-util/include-what-you-use/files: include-what-you-use-3.3-issue-110-elaboration.patch Sergei Trofimovich (slyfox)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox