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