[PATCH] D57991: [Driver][Darwin] Emit an error when using -pg on OS without support for it.
This revision was automatically updated to reflect the committed changes. Closed by commit rL354084: [Driver][Darwin] Emit an error when using -pg on OS without support for it. (authored by vsapsai, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D57991?vs=186522=186935#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D57991/new/ https://reviews.llvm.org/D57991 Files: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td cfe/trunk/lib/Driver/ToolChains/Darwin.cpp cfe/trunk/test/Driver/darwin-ld.c Index: cfe/trunk/lib/Driver/ToolChains/Darwin.cpp === --- cfe/trunk/lib/Driver/ToolChains/Darwin.cpp +++ cfe/trunk/lib/Driver/ToolChains/Darwin.cpp @@ -2289,22 +2289,27 @@ } } else { if (Args.hasArg(options::OPT_pg) && SupportsProfiling()) { -if (Args.hasArg(options::OPT_static) || -Args.hasArg(options::OPT_object) || -Args.hasArg(options::OPT_preload)) { - CmdArgs.push_back("-lgcrt0.o"); -} else { - CmdArgs.push_back("-lgcrt1.o"); +if (isTargetMacOS() && isMacosxVersionLT(10, 9)) { + if (Args.hasArg(options::OPT_static) || + Args.hasArg(options::OPT_object) || + Args.hasArg(options::OPT_preload)) { +CmdArgs.push_back("-lgcrt0.o"); + } else { +CmdArgs.push_back("-lgcrt1.o"); - // darwin_crt2 spec is empty. +// darwin_crt2 spec is empty. + } + // By default on OS X 10.8 and later, we don't link with a crt1.o + // file and the linker knows to use _main as the entry point. But, + // when compiling with -pg, we need to link with the gcrt1.o file, + // so pass the -no_new_main option to tell the linker to use the + // "start" symbol as the entry point. + if (isTargetMacOS() && !isMacosxVersionLT(10, 8)) +CmdArgs.push_back("-no_new_main"); +} else { + getDriver().Diag(diag::err_drv_clang_unsupported_opt_pg_darwin) + << isTargetMacOS(); } -// By default on OS X 10.8 and later, we don't link with a crt1.o -// file and the linker knows to use _main as the entry point. But, -// when compiling with -pg, we need to link with the gcrt1.o file, -// so pass the -no_new_main option to tell the linker to use the -// "start" symbol as the entry point. -if (isTargetMacOS() && !isMacosxVersionLT(10, 8)) - CmdArgs.push_back("-no_new_main"); } else { if (Args.hasArg(options::OPT_static) || Args.hasArg(options::OPT_object) || Index: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td === --- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td +++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td @@ -96,6 +96,8 @@ "the clang compiler does not support '%0'">; def err_drv_clang_unsupported_opt_cxx_darwin_i386 : Error< "the clang compiler does not support '%0' for C++ on Darwin/i386">; +def err_drv_clang_unsupported_opt_pg_darwin: Error< + "the clang compiler does not support -pg option on %select{Darwin|versions of OS X 10.9 and later}0">; def err_drv_clang_unsupported_opt_faltivec : Error< "the clang compiler does not support '%0', %1">; def err_drv_command_failed : Error< Index: cfe/trunk/test/Driver/darwin-ld.c === --- cfe/trunk/test/Driver/darwin-ld.c +++ cfe/trunk/test/Driver/darwin-ld.c @@ -203,6 +203,14 @@ // LINK_PG: -lgcrt1.o // LINK_PG: -no_new_main +// RUN: %clang -target i386-apple-darwin13 -pg -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=LINK_PG_NO_SUPPORT_OSX %s < %t.log +// LINK_PG_NO_SUPPORT_OSX: error: the clang compiler does not support -pg option on versions of OS X + +// RUN: %clang -target x86_64-apple-ios5.0 -pg -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=LINK_PG_NO_SUPPORT %s < %t.log +// LINK_PG_NO_SUPPORT: error: the clang compiler does not support -pg option on Darwin + // Check that clang links with libgcc_s.1 for iOS 4 and earlier, but not arm64. // RUN: %clang -target armv7-apple-ios4.0 -miphoneos-version-min=4.0 -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=LINK_IOS_LIBGCC_S %s < %t.log Index: cfe/trunk/lib/Driver/ToolChains/Darwin.cpp === --- cfe/trunk/lib/Driver/ToolChains/Darwin.cpp +++ cfe/trunk/lib/Driver/ToolChains/Darwin.cpp @@ -2289,22 +2289,27 @@ } } else { if (Args.hasArg(options::OPT_pg) && SupportsProfiling()) { -if (Args.hasArg(options::OPT_static) || -Args.hasArg(options::OPT_object) || -Args.hasArg(options::OPT_preload)) { -
[PATCH] D57991: [Driver][Darwin] Emit an error when using -pg on OS without support for it.
vsapsai updated this revision to Diff 186522. vsapsai added a comment. Herald added a subscriber: jdoerfert. - Use `%select` per Steven's recommendation. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D57991/new/ https://reviews.llvm.org/D57991 Files: clang/include/clang/Basic/DiagnosticDriverKinds.td clang/lib/Driver/ToolChains/Darwin.cpp clang/test/Driver/darwin-ld.c Index: clang/test/Driver/darwin-ld.c === --- clang/test/Driver/darwin-ld.c +++ clang/test/Driver/darwin-ld.c @@ -203,6 +203,14 @@ // LINK_PG: -lgcrt1.o // LINK_PG: -no_new_main +// RUN: %clang -target i386-apple-darwin13 -pg -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=LINK_PG_NO_SUPPORT_OSX %s < %t.log +// LINK_PG_NO_SUPPORT_OSX: error: the clang compiler does not support -pg option on versions of OS X + +// RUN: %clang -target x86_64-apple-ios5.0 -pg -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=LINK_PG_NO_SUPPORT %s < %t.log +// LINK_PG_NO_SUPPORT: error: the clang compiler does not support -pg option on Darwin + // Check that clang links with libgcc_s.1 for iOS 4 and earlier, but not arm64. // RUN: %clang -target armv7-apple-ios4.0 -miphoneos-version-min=4.0 -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=LINK_IOS_LIBGCC_S %s < %t.log Index: clang/lib/Driver/ToolChains/Darwin.cpp === --- clang/lib/Driver/ToolChains/Darwin.cpp +++ clang/lib/Driver/ToolChains/Darwin.cpp @@ -2289,22 +2289,27 @@ } } else { if (Args.hasArg(options::OPT_pg) && SupportsProfiling()) { -if (Args.hasArg(options::OPT_static) || -Args.hasArg(options::OPT_object) || -Args.hasArg(options::OPT_preload)) { - CmdArgs.push_back("-lgcrt0.o"); -} else { - CmdArgs.push_back("-lgcrt1.o"); +if (isTargetMacOS() && isMacosxVersionLT(10, 9)) { + if (Args.hasArg(options::OPT_static) || + Args.hasArg(options::OPT_object) || + Args.hasArg(options::OPT_preload)) { +CmdArgs.push_back("-lgcrt0.o"); + } else { +CmdArgs.push_back("-lgcrt1.o"); - // darwin_crt2 spec is empty. +// darwin_crt2 spec is empty. + } + // By default on OS X 10.8 and later, we don't link with a crt1.o + // file and the linker knows to use _main as the entry point. But, + // when compiling with -pg, we need to link with the gcrt1.o file, + // so pass the -no_new_main option to tell the linker to use the + // "start" symbol as the entry point. + if (isTargetMacOS() && !isMacosxVersionLT(10, 8)) +CmdArgs.push_back("-no_new_main"); +} else { + getDriver().Diag(diag::err_drv_clang_unsupported_opt_pg_darwin) + << isTargetMacOS(); } -// By default on OS X 10.8 and later, we don't link with a crt1.o -// file and the linker knows to use _main as the entry point. But, -// when compiling with -pg, we need to link with the gcrt1.o file, -// so pass the -no_new_main option to tell the linker to use the -// "start" symbol as the entry point. -if (isTargetMacOS() && !isMacosxVersionLT(10, 8)) - CmdArgs.push_back("-no_new_main"); } else { if (Args.hasArg(options::OPT_static) || Args.hasArg(options::OPT_object) || Index: clang/include/clang/Basic/DiagnosticDriverKinds.td === --- clang/include/clang/Basic/DiagnosticDriverKinds.td +++ clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -96,6 +96,8 @@ "the clang compiler does not support '%0'">; def err_drv_clang_unsupported_opt_cxx_darwin_i386 : Error< "the clang compiler does not support '%0' for C++ on Darwin/i386">; +def err_drv_clang_unsupported_opt_pg_darwin: Error< + "the clang compiler does not support -pg option on %select{Darwin|versions of OS X 10.9 and later}0">; def err_drv_clang_unsupported_opt_faltivec : Error< "the clang compiler does not support '%0', %1">; def err_drv_command_failed : Error< Index: clang/test/Driver/darwin-ld.c === --- clang/test/Driver/darwin-ld.c +++ clang/test/Driver/darwin-ld.c @@ -203,6 +203,14 @@ // LINK_PG: -lgcrt1.o // LINK_PG: -no_new_main +// RUN: %clang -target i386-apple-darwin13 -pg -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=LINK_PG_NO_SUPPORT_OSX %s < %t.log +// LINK_PG_NO_SUPPORT_OSX: error: the clang compiler does not support -pg option on versions of OS X + +// RUN: %clang -target x86_64-apple-ios5.0 -pg -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=LINK_PG_NO_SUPPORT %s < %t.log +// LINK_PG_NO_SUPPORT: error: the clang compiler does not support -pg option on Darwin + // Check that clang links with libgcc_s.1 for iOS 4 and
[PATCH] D57991: [Driver][Darwin] Emit an error when using -pg on OS without support for it.
steven_wu accepted this revision. steven_wu added a comment. This revision is now accepted and ready to land. LGTM with a suggestion to make code cleaner. Comment at: clang/include/clang/Basic/DiagnosticDriverKinds.td:101 + "the clang compiler does not support -pg option on Darwin">; +def err_drv_clang_unsupported_opt_pg_darwin_osx: Error< + "the clang compiler does not support -pg option on versions of OS X 10.9 and later">; Might be cleaner if you use %select here. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D57991/new/ https://reviews.llvm.org/D57991 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D57991: [Driver][Darwin] Emit an error when using -pg on OS without support for it.
vsapsai created this revision. vsapsai added reviewers: dexonsmith, bob.wilson, steven_wu. Herald added a subscriber: jkorous. Instead of letting a program fail at runtime, emit an error during compilation. rdar://problem/12206955 https://reviews.llvm.org/D57991 Files: clang/include/clang/Basic/DiagnosticDriverKinds.td clang/lib/Driver/ToolChains/Darwin.cpp clang/test/Driver/darwin-ld.c Index: clang/test/Driver/darwin-ld.c === --- clang/test/Driver/darwin-ld.c +++ clang/test/Driver/darwin-ld.c @@ -203,6 +203,14 @@ // LINK_PG: -lgcrt1.o // LINK_PG: -no_new_main +// RUN: %clang -target i386-apple-darwin13 -pg -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=LINK_PG_NO_SUPPORT_OSX %s < %t.log +// LINK_PG_NO_SUPPORT_OSX: error: the clang compiler does not support -pg option on versions of OS X + +// RUN: %clang -target x86_64-apple-ios5.0 -pg -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=LINK_PG_NO_SUPPORT %s < %t.log +// LINK_PG_NO_SUPPORT: error: the clang compiler does not support -pg option on Darwin + // Check that clang links with libgcc_s.1 for iOS 4 and earlier, but not arm64. // RUN: %clang -target armv7-apple-ios4.0 -miphoneos-version-min=4.0 -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=LINK_IOS_LIBGCC_S %s < %t.log Index: clang/lib/Driver/ToolChains/Darwin.cpp === --- clang/lib/Driver/ToolChains/Darwin.cpp +++ clang/lib/Driver/ToolChains/Darwin.cpp @@ -2289,22 +2289,29 @@ } } else { if (Args.hasArg(options::OPT_pg) && SupportsProfiling()) { -if (Args.hasArg(options::OPT_static) || -Args.hasArg(options::OPT_object) || -Args.hasArg(options::OPT_preload)) { - CmdArgs.push_back("-lgcrt0.o"); -} else { - CmdArgs.push_back("-lgcrt1.o"); +if (isTargetMacOS() && isMacosxVersionLT(10, 9)) { + if (Args.hasArg(options::OPT_static) || + Args.hasArg(options::OPT_object) || + Args.hasArg(options::OPT_preload)) { +CmdArgs.push_back("-lgcrt0.o"); + } else { +CmdArgs.push_back("-lgcrt1.o"); - // darwin_crt2 spec is empty. +// darwin_crt2 spec is empty. + } + // By default on OS X 10.8 and later, we don't link with a crt1.o + // file and the linker knows to use _main as the entry point. But, + // when compiling with -pg, we need to link with the gcrt1.o file, + // so pass the -no_new_main option to tell the linker to use the + // "start" symbol as the entry point. + if (isTargetMacOS() && !isMacosxVersionLT(10, 8)) +CmdArgs.push_back("-no_new_main"); +} else { + getDriver().Diag( + isTargetMacOS() + ? diag::err_drv_clang_unsupported_opt_pg_darwin_osx + : diag::err_drv_clang_unsupported_opt_pg_darwin); } -// By default on OS X 10.8 and later, we don't link with a crt1.o -// file and the linker knows to use _main as the entry point. But, -// when compiling with -pg, we need to link with the gcrt1.o file, -// so pass the -no_new_main option to tell the linker to use the -// "start" symbol as the entry point. -if (isTargetMacOS() && !isMacosxVersionLT(10, 8)) - CmdArgs.push_back("-no_new_main"); } else { if (Args.hasArg(options::OPT_static) || Args.hasArg(options::OPT_object) || Index: clang/include/clang/Basic/DiagnosticDriverKinds.td === --- clang/include/clang/Basic/DiagnosticDriverKinds.td +++ clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -96,6 +96,10 @@ "the clang compiler does not support '%0'">; def err_drv_clang_unsupported_opt_cxx_darwin_i386 : Error< "the clang compiler does not support '%0' for C++ on Darwin/i386">; +def err_drv_clang_unsupported_opt_pg_darwin: Error< + "the clang compiler does not support -pg option on Darwin">; +def err_drv_clang_unsupported_opt_pg_darwin_osx: Error< + "the clang compiler does not support -pg option on versions of OS X 10.9 and later">; def err_drv_clang_unsupported_opt_faltivec : Error< "the clang compiler does not support '%0', %1">; def err_drv_command_failed : Error< Index: clang/test/Driver/darwin-ld.c === --- clang/test/Driver/darwin-ld.c +++ clang/test/Driver/darwin-ld.c @@ -203,6 +203,14 @@ // LINK_PG: -lgcrt1.o // LINK_PG: -no_new_main +// RUN: %clang -target i386-apple-darwin13 -pg -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=LINK_PG_NO_SUPPORT_OSX %s < %t.log +// LINK_PG_NO_SUPPORT_OSX: error: the clang compiler does not support -pg option on versions of OS X + +// RUN: %clang -target x86_64-apple-ios5.0 -pg -### %t.o 2> %t.log +//