Index: cfe/trunk/lib/Driver/Driver.cpp =================================================================== --- cfe/trunk/lib/Driver/Driver.cpp +++ cfe/trunk/lib/Driver/Driver.cpp @@ -209,6 +209,7 @@ DerivedArgList *DAL = new DerivedArgList(Args); bool HasNostdlib = Args.hasArg(options::OPT_nostdlib); + bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs); for (Arg *A : Args) { // Unfortunately, we have to parse some forwarding options (-Xassembler, // -Xlinker, -Xpreprocessor) because we either integrate their functionality @@ -252,7 +253,7 @@ StringRef Value = A->getValue(); // Rewrite unless -nostdlib is present. - if (!HasNostdlib && Value == "stdc++") { + if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") { DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx)); continue; } Index: cfe/trunk/test/Driver/nodefaultlib.c =================================================================== --- cfe/trunk/test/Driver/nodefaultlib.c +++ cfe/trunk/test/Driver/nodefaultlib.c @@ -1,8 +1,10 @@ -// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t -// RUN: FileCheck < %t %s -// -// CHECK-NOT: start-group -// CHECK-NOT: "-lgcc" -// CHECK-NOT: "-lc" -// CHECK: crtbegin -// CHECK: crtend +// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=TEST1 %s +// TEST1-NOT: start-group +// TEST1-NOT: "-lgcc" +// TEST1-NOT: "-lc" +// TEST1: crtbegin +// TEST1: crtend + +// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s +// TEST2-NOT: "-lc++" +// TEST2: "-lstdc++"