diff --git a/src/dmd/cppmanglewin.d b/src/dmd/cppmanglewin.d index 67b3ab1138e4..62924dacff54 100644 --- a/src/dmd/cppmanglewin.d +++ b/src/dmd/cppmanglewin.d @@ -137,6 +137,8 @@ public: { if (checkImmutableShared(type)) return; + if (checkTypeSaved(type)) + return; buf.writestring("$$T"); flags &= ~IS_NOT_TOP_TYPE; diff --git a/test/runnable/cpp11.d b/test/runnable/cpp11.d new file mode 100644 index 000000000000..a951fe5586ea --- /dev/null +++ b/test/runnable/cpp11.d @@ -0,0 +1,34 @@ +// DISABLED: win32 +// REQUIRED_ARGS: -stdc++=c++11 +// EXTRA_CPP_SOURCES: cpp11.cpp +// CXXFLAGS: -std=c++11 + +// Disabled on win32 because the compiler is too old + +/****************************************/ +alias nullptr_t = typeof(null); + +// Only run on OSX/Win64 because the compilers are too old +// and nullptr_t gets substituted +version (FreeBSD) + version = IgnoreNullptrTest; +version (linux) + version = IgnoreNullptrTest; + +version (IgnoreNullptrTest) { void test17() {} } +else +{ + extern (C++) void testnull(nullptr_t); + extern (C++) void testnullnull(nullptr_t, nullptr_t); + + void test17() + { + testnull(null); + testnullnull(null, null); + } +} + +void main() +{ + test17(); +} diff --git a/test/runnable/cppa.d b/test/runnable/cppa.d index 01de4b97dac8..6691e33f9433 100644 --- a/test/runnable/cppa.d +++ b/test/runnable/cppa.d @@ -727,20 +727,6 @@ void test16() static assert(0); } -/****************************************/ -/+ FIXME: Requires C++11 compiler. -alias nullptr_t = typeof(null); - -extern (C++) void testnull(nullptr_t); -extern (C++) void testnullnull(nullptr_t, nullptr_t); - -void test17() -{ - testnull(null); - testnullnull(null, null); -} -+/ - /****************************************/ struct S13707 @@ -1624,7 +1610,6 @@ void main() test13289(); test15(); test16(); - //test17(); func13707(); func13932(S13932!(-1)(0)); foo13337(S13337()); @@ -1650,6 +1635,6 @@ void main() test18966(); test19134(); test18955(); - + printf("Success\n"); } diff --git a/test/runnable/extra-files/cpp11.cpp b/test/runnable/extra-files/cpp11.cpp new file mode 100644 index 000000000000..af90d3b083fa --- /dev/null +++ b/test/runnable/extra-files/cpp11.cpp @@ -0,0 +1,13 @@ +#include +#include + +void testnull(std::nullptr_t n) +{ + assert(n == nullptr); +} + +void testnullnull(std::nullptr_t n1, std::nullptr_t n2) +{ + assert(n1 == nullptr); + assert(n2 == nullptr); +} diff --git a/test/runnable/extra-files/cppb.cpp b/test/runnable/extra-files/cppb.cpp index 81b2b13c5498..550cd677d2dd 100644 --- a/test/runnable/extra-files/cppb.cpp +++ b/test/runnable/extra-files/cppb.cpp @@ -464,20 +464,6 @@ unsigned long testul(unsigned long ul) return ul + sizeof(unsigned long); } -/******************************************/ -/* FIXME: Requires C++11 compiler. -void testnull(nullptr_t n) -{ - assert(n == NULL); -} - -void testnullnull(nullptr_t n1, nullptr_t n2) -{ - assert(n1 == NULL); - assert(n2 == NULL); -} -*/ - /******************************************/ struct S13707 diff --git a/test/tools/d_do_test.d b/test/tools/d_do_test.d index 70ba224e49dd..992a137d0a52 100755 --- a/test/tools/d_do_test.d +++ b/test/tools/d_do_test.d @@ -634,13 +634,13 @@ int tryMain(string[] args) { case "dmd": if(envData.os != "win32" && envData.os != "win64") - testArgs.requiredArgs ~= " -L-lstdc++"; + testArgs.requiredArgs ~= " -L-lstdc++ -L--no-demangle"; break; case "ldc": - testArgs.requiredArgs ~= " -L-lstdc++"; + testArgs.requiredArgs ~= " -L-lstdc++ -L--no-demangle"; break; case "gdc": - testArgs.requiredArgs ~= "-Xlinker -lstdc++"; + testArgs.requiredArgs ~= "-Xlinker -lstdc++ -Xlinker --no-demangle"; break; default: writeln("unknown compiler: "~envData.compiler);