From b7689a0ae46fe89635d6de4c2039bb94a6685377 Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Thu, 4 Jun 2015 00:30:22 +0000 Subject: [PATCH] Driver: Don't crash when generating crash reports for *-header inputs If we crash while handling headers, the crash report mechanism currently tries to make a string out of a null pointer when it tries to make up a file extension. Map *-header input types to reasonable extensions to avoid this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@238994 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Driver/Types.def | 10 +++++----- test/Driver/crash-report-header.h | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 test/Driver/crash-report-header.h diff --git a/include/clang/Driver/Types.def b/include/clang/Driver/Types.def index adc12d34de..4b696ae5e0 100644 --- a/include/clang/Driver/Types.def +++ b/include/clang/Driver/Types.def @@ -55,14 +55,14 @@ TYPE("objective-c++", ObjCXX, PP_ObjCXX, "mm", "u") // C family input files to precompile. TYPE("c-header-cpp-output", PP_CHeader, INVALID, "i", "p") -TYPE("c-header", CHeader, PP_CHeader, nullptr, "pu") -TYPE("cl-header", CLHeader, PP_CHeader, nullptr, "pu") +TYPE("c-header", CHeader, PP_CHeader, "h", "pu") +TYPE("cl-header", CLHeader, PP_CHeader, "h", "pu") TYPE("objective-c-header-cpp-output", PP_ObjCHeader, INVALID, "mi", "p") -TYPE("objective-c-header", ObjCHeader, PP_ObjCHeader, nullptr, "pu") +TYPE("objective-c-header", ObjCHeader, PP_ObjCHeader, "h", "pu") TYPE("c++-header-cpp-output", PP_CXXHeader, INVALID, "ii", "p") -TYPE("c++-header", CXXHeader, PP_CXXHeader, nullptr, "pu") +TYPE("c++-header", CXXHeader, PP_CXXHeader, "hh", "pu") TYPE("objective-c++-header-cpp-output", PP_ObjCXXHeader, INVALID, "mii", "p") -TYPE("objective-c++-header", ObjCXXHeader, PP_ObjCXXHeader, nullptr, "pu") +TYPE("objective-c++-header", ObjCXXHeader, PP_ObjCXXHeader, "h", "pu") // Other languages. TYPE("ada", Ada, INVALID, nullptr, "u") diff --git a/test/Driver/crash-report-header.h b/test/Driver/crash-report-header.h new file mode 100644 index 0000000000..e0193cbe45 --- /dev/null +++ b/test/Driver/crash-report-header.h @@ -0,0 +1,18 @@ +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: not env TMPDIR="%t" TEMP="%t" TMP="%t" RC_DEBUG_OPTIONS=1 %clang -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: cat %t/crash-report-header-*.h | FileCheck --check-prefix=CHECKSRC "%s" +// RUN: cat %t/crash-report-header-*.sh | FileCheck --check-prefix=CHECKSH "%s" +// REQUIRES: crash-recovery + +// because of the glob (*.h, *.sh) +// REQUIRES: shell + +#pragma clang __debug parser_crash +// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK-NEXT: note: diagnostic msg: {{.*}}.h +FOO +// CHECKSRC: FOO +// CHECKSH: "-cc1" +// CHECKSH: "-main-file-name" "crash-report-header.h" +// CHECKSH: "crash-report-header-{{[^ ]*}}.h" -- 2.50.1