summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorVassil Vassilev <v.g.vassilev@gmail.com>2016-03-30 22:18:29 +0000
committerVassil Vassilev <v.g.vassilev@gmail.com>2016-03-30 22:18:29 +0000
commitbab6f96fff363fbfdc15fd1f62452ff243da843c (patch)
treede254d8844eac530c84100e03dab88909baf8cdd /clang/test
parentd8d94652b2345f596b3a62dbcd32cbb0a1a50856 (diff)
downloadbcm5719-llvm-bab6f96fff363fbfdc15fd1f62452ff243da843c.tar.gz
bcm5719-llvm-bab6f96fff363fbfdc15fd1f62452ff243da843c.zip
Canonicalize UnaryTransformType types when they don't have a known underlying type.
Fixes https://llvm.org/bugs/show_bug.cgi?id=26014 Reviewed by Richard Smith. llvm-svn: 264937
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Modules/Inputs/PR26014/A.h13
-rw-r--r--clang/test/Modules/Inputs/PR26014/B.h10
-rw-r--r--clang/test/Modules/Inputs/PR26014/module.modulemap9
-rw-r--r--clang/test/Modules/pr26014.cpp7
-rw-r--r--clang/test/SemaCXX/underlying_type.cpp7
5 files changed, 46 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/PR26014/A.h b/clang/test/Modules/Inputs/PR26014/A.h
new file mode 100644
index 00000000000..49de5ba479a
--- /dev/null
+++ b/clang/test/Modules/Inputs/PR26014/A.h
@@ -0,0 +1,13 @@
+#ifndef _LIBCPP_TYPE_TRAITS
+#define _LIBCPP_TYPE_TRAITS
+
+
+template <class _Tp>
+struct underlying_type
+{
+ typedef __underlying_type(_Tp) type;
+};
+
+#endif // _LIBCPP_TYPE_TRAITS
+
+#include "B.h"
diff --git a/clang/test/Modules/Inputs/PR26014/B.h b/clang/test/Modules/Inputs/PR26014/B.h
new file mode 100644
index 00000000000..58d1f8ff2a3
--- /dev/null
+++ b/clang/test/Modules/Inputs/PR26014/B.h
@@ -0,0 +1,10 @@
+#ifndef _LIBCPP_TYPE_TRAITS
+#define _LIBCPP_TYPE_TRAITS
+
+template <class _Tp>
+struct underlying_type
+{
+ typedef __underlying_type(_Tp) type;
+};
+
+#endif // _LIBCPP_TYPE_TRAITS
diff --git a/clang/test/Modules/Inputs/PR26014/module.modulemap b/clang/test/Modules/Inputs/PR26014/module.modulemap
new file mode 100644
index 00000000000..49374181d75
--- /dev/null
+++ b/clang/test/Modules/Inputs/PR26014/module.modulemap
@@ -0,0 +1,9 @@
+module A {
+ header "A.h"
+ export *
+}
+
+module B {
+ header "B.h"
+ export *
+}
diff --git a/clang/test/Modules/pr26014.cpp b/clang/test/Modules/pr26014.cpp
new file mode 100644
index 00000000000..f9ebd4e1dd7
--- /dev/null
+++ b/clang/test/Modules/pr26014.cpp
@@ -0,0 +1,7 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -I%S/Inputs/PR26014 -verify %s
+// RUN: %clang_cc1 -fmodules -fmodule-map-file=%S/Inputs/PR26014/module.modulemap -fmodules-cache-path=%t -I%S/Inputs/PR26014 -verify %s
+
+#include "A.h"
+
+// expected-no-diagnostics
diff --git a/clang/test/SemaCXX/underlying_type.cpp b/clang/test/SemaCXX/underlying_type.cpp
index 61208c72af0..dd019ae6e27 100644
--- a/clang/test/SemaCXX/underlying_type.cpp
+++ b/clang/test/SemaCXX/underlying_type.cpp
@@ -55,3 +55,10 @@ namespace PR19966 {
// expected-error@-2 {{constant expression}}
};
}
+
+template<typename T> void f(__underlying_type(T));
+template<typename T> void f(__underlying_type(T));
+enum E {};
+void PR26014() { f<E>(0); } // should not yield an ambiguity error.
+
+template<typename ...T> void f(__underlying_type(T) v); // expected-error {{declaration type contains unexpanded parameter pack 'T'}}
OpenPOWER on IntegriCloud