r230303 - [modules] Properly check whether a declaration is std::initializer_list. This

Richard Smith richard-llvm at metafoo.co.uk
Mon Feb 23 19:30:15 PST 2015


Author: rsmith
Date: Mon Feb 23 21:30:14 2015
New Revision: 230303

URL: http://llvm.org/viewvc/llvm-project?rev=230303&view=rev
Log:
[modules] Properly check whether a declaration is std::initializer_list. This
bug is not actually modules-specific, but it's a little tricky to tickle it
outside of modules builds, so submitting with the reduced testcase I have.

Added:
    cfe/trunk/test/Modules/Inputs/initializer_list/
    cfe/trunk/test/Modules/Inputs/initializer_list/direct.h
      - copied unchanged from r230122, cfe/trunk/test/Modules/Inputs/initializer_list
    cfe/trunk/test/Modules/Inputs/initializer_list/direct.modulemap
    cfe/trunk/test/Modules/Inputs/initializer_list/indirect.h
    cfe/trunk/test/Modules/Inputs/initializer_list/indirect.modulemap
Modified:
    cfe/trunk/lib/Sema/SemaDeclCXX.cpp
    cfe/trunk/test/Modules/Inputs/module.map
    cfe/trunk/test/Modules/initializer_list.cpp

Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=230303&r1=230302&r2=230303&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Mon Feb 23 21:30:14 2015
@@ -7373,7 +7373,7 @@ bool Sema::isStdInitializerList(QualType
     StdInitializerList = Template;
   }
 
-  if (Template != StdInitializerList)
+  if (Template->getCanonicalDecl() != StdInitializerList->getCanonicalDecl())
     return false;
 
   // This is an instance of std::initializer_list. Find the argument type.

Added: cfe/trunk/test/Modules/Inputs/initializer_list/direct.modulemap
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/initializer_list/direct.modulemap?rev=230303&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/initializer_list/direct.modulemap (added)
+++ cfe/trunk/test/Modules/Inputs/initializer_list/direct.modulemap Mon Feb 23 21:30:14 2015
@@ -0,0 +1 @@
+module initializer_list { header "direct.h" }

Added: cfe/trunk/test/Modules/Inputs/initializer_list/indirect.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/initializer_list/indirect.h?rev=230303&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/initializer_list/indirect.h (added)
+++ cfe/trunk/test/Modules/Inputs/initializer_list/indirect.h Mon Feb 23 21:30:14 2015
@@ -0,0 +1 @@
+#include "direct.h"

Added: cfe/trunk/test/Modules/Inputs/initializer_list/indirect.modulemap
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/initializer_list/indirect.modulemap?rev=230303&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/initializer_list/indirect.modulemap (added)
+++ cfe/trunk/test/Modules/Inputs/initializer_list/indirect.modulemap Mon Feb 23 21:30:14 2015
@@ -0,0 +1 @@
+module initializer_list { header "indirect.h" }

Modified: cfe/trunk/test/Modules/Inputs/module.map
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/module.map?rev=230303&r1=230302&r2=230303&view=diff
==============================================================================
--- cfe/trunk/test/Modules/Inputs/module.map (original)
+++ cfe/trunk/test/Modules/Inputs/module.map Mon Feb 23 21:30:14 2015
@@ -296,10 +296,6 @@ module warn_unused_local_typedef {
   header "warn-unused-local-typedef.h"
 }
 
-module initializer_list {
-  header "initializer_list"
-}
-
 module using_decl {
   module a { header "using-decl-a.h" export * }
   module b { header "using-decl-b.h" export * }

Modified: cfe/trunk/test/Modules/initializer_list.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/initializer_list.cpp?rev=230303&r1=230302&r2=230303&view=diff
==============================================================================
--- cfe/trunk/test/Modules/initializer_list.cpp (original)
+++ cfe/trunk/test/Modules/initializer_list.cpp Mon Feb 23 21:30:14 2015
@@ -1,7 +1,23 @@
 // RUN: rm -rf %t
-// RUN: %clang_cc1 -x objective-c++ -fmodules -fmodules-cache-path=%t -I %S/Inputs %s -verify -std=c++11
+//
+// RUN: %clang_cc1 -x objective-c++ -fmodules -fmodules-cache-path=%t \
+// RUN:     -I %S/Inputs/initializer_list \
+// RUN:     -fmodule-map-file=%S/Inputs/initializer_list/direct.modulemap \
+// RUN:     %s -verify -std=c++11
+//
+// RUN: %clang_cc1 -x objective-c++ -fmodules -fmodules-cache-path=%t \
+// RUN:     -I %S/Inputs/initializer_list \
+// RUN:     -fmodule-map-file=%S/Inputs/initializer_list/indirect.modulemap \
+// RUN:     %s -verify -std=c++11 -DINCLUDE_DIRECT
 
 // expected-no-diagnostics
+
+#ifdef INCLUDE_DIRECT
+#include "direct.h"
+auto k = {1, 2, 3};
+#endif
+
 @import initializer_list;
 
+auto v = {1, 2, 3};
 int n = std::min({1, 2, 3});





More information about the cfe-commits mailing list