From: Daniel Dunbar Date: Thu, 5 May 2011 02:12:02 +0000 (+0000) Subject: Frontend: Fix a crash in CC_LOG_DIAGNOSTICS handling. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7665ad83d8eff7b8b2c5f3b893b6b7ece38f847c;p=clang Frontend: Fix a crash in CC_LOG_DIAGNOSTICS handling. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130909 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/LogDiagnosticPrinter.cpp b/lib/Frontend/LogDiagnosticPrinter.cpp index 954bad4e7c..78eb1b2128 100644 --- a/lib/Frontend/LogDiagnosticPrinter.cpp +++ b/lib/Frontend/LogDiagnosticPrinter.cpp @@ -99,7 +99,7 @@ void LogDiagnosticPrinter::HandleDiagnostic(Diagnostic::Level Level, DiagnosticClient::HandleDiagnostic(Level, Info); // Initialize the main file name, if we haven't already fetched it. - if (MainFilename.empty()) { + if (MainFilename.empty() && Info.hasSourceManager()) { const SourceManager &SM = Info.getSourceManager(); FileID FID = SM.getMainFileID(); if (!FID.isInvalid()) { @@ -122,7 +122,7 @@ void LogDiagnosticPrinter::HandleDiagnostic(Diagnostic::Level Level, // Set the location information. DE.Filename = ""; DE.Line = DE.Column = 0; - if (Info.getLocation().isValid()) { + if (Info.getLocation().isValid() && Info.hasSourceManager()) { const SourceManager &SM = Info.getSourceManager(); PresumedLoc PLoc = SM.getPresumedLoc(Info.getLocation()); diff --git a/test/Driver/cc-log-diagnostics.c b/test/Driver/cc-log-diagnostics.c index a70686ad61..6c1b8ed896 100644 --- a/test/Driver/cc-log-diagnostics.c +++ b/test/Driver/cc-log-diagnostics.c @@ -1,7 +1,7 @@ +// RUN: rm -f %t.log // RUN: env RC_DEBUG_OPTIONS=1 \ -// RUN: CC_LOG_DIAGNOSTICS=1 \ -// RUN: CC_LOG_DIAGNOSTICS_FILE=%t.log \ -// RUN: %clang -no-canonical-prefixes -ccc-host-triple x86_64-apple-darwin10 -fsyntax-only %s +// RUN: CC_LOG_DIAGNOSTICS=1 CC_LOG_DIAGNOSTICS_FILE=%t.log \ +// RUN: %clang -Wfoobar -no-canonical-prefixes -ccc-host-triple x86_64-apple-darwin10 -fsyntax-only %s // RUN: FileCheck %s < %t.log int f0() {} @@ -16,6 +16,12 @@ int f0() {} // CHECK: // CHECK: level // CHECK: warning +// CHECK: message +// CHECK: unknown warning option '-Wfoobar' +// CHECK: +// CHECK: +// CHECK: level +// CHECK: warning // CHECK: filename // CHECK: {{.*}}cc-log-diagnostics.c // CHECK: line