summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2015-07-05 14:23:59 +0000
committerdim <dim@FreeBSD.org>2015-07-05 14:23:59 +0000
commite7bcad327814a78ecb8d5f5545d2e3df84c67a5c (patch)
treeac719b5984165053bf83d71142e4d96b609b9784 /tools
parent9dd834653b811ad20382e98a87dff824980c9916 (diff)
downloadFreeBSD-src-e7bcad327814a78ecb8d5f5545d2e3df84c67a5c.zip
FreeBSD-src-e7bcad327814a78ecb8d5f5545d2e3df84c67a5c.tar.gz
Vendor import of clang trunk r241361:
https://llvm.org/svn/llvm-project/cfe/trunk@241361
Diffstat (limited to 'tools')
-rw-r--r--tools/clang-fuzzer/ClangFuzzer.cpp5
-rw-r--r--tools/driver/cc1as_main.cpp75
-rw-r--r--tools/driver/driver.cpp8
-rw-r--r--tools/libclang/CIndex.cpp28
-rw-r--r--tools/libclang/CXCursor.cpp6
-rwxr-xr-xtools/scan-build/ccc-analyzer75
-rwxr-xr-xtools/scan-build/scan-build35
7 files changed, 122 insertions, 110 deletions
diff --git a/tools/clang-fuzzer/ClangFuzzer.cpp b/tools/clang-fuzzer/ClangFuzzer.cpp
index 17ef052..124911c 100644
--- a/tools/clang-fuzzer/ClangFuzzer.cpp
+++ b/tools/clang-fuzzer/ClangFuzzer.cpp
@@ -39,5 +39,8 @@ extern "C" void LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
Invocation->getPreprocessorOpts().addRemappedFile("./test.cc", Input.release());
std::unique_ptr<tooling::ToolAction> action(
tooling::newFrontendActionFactory<clang::SyntaxOnlyAction>());
- action->runInvocation(Invocation.release(), Files.get(), &Diags);
+ std::shared_ptr<PCHContainerOperations> PCHContainerOps =
+ std::make_shared<RawPCHContainerOperations>();
+ action->runInvocation(Invocation.release(), Files.get(), PCHContainerOps,
+ &Diags);
}
diff --git a/tools/driver/cc1as_main.cpp b/tools/driver/cc1as_main.cpp
index f7ac17f..aa92541 100644
--- a/tools/driver/cc1as_main.cpp
+++ b/tools/driver/cc1as_main.cpp
@@ -161,68 +161,68 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
const unsigned IncludedFlagsBitmask = options::CC1AsOption;
unsigned MissingArgIndex, MissingArgCount;
- std::unique_ptr<InputArgList> Args(
- OptTbl->ParseArgs(Argv.begin(), Argv.end(), MissingArgIndex, MissingArgCount,
- IncludedFlagsBitmask));
+ InputArgList Args = OptTbl->ParseArgs(Argv, MissingArgIndex, MissingArgCount,
+ IncludedFlagsBitmask);
// Check for missing argument error.
if (MissingArgCount) {
Diags.Report(diag::err_drv_missing_argument)
- << Args->getArgString(MissingArgIndex) << MissingArgCount;
+ << Args.getArgString(MissingArgIndex) << MissingArgCount;
Success = false;
}
// Issue errors on unknown arguments.
- for (const Arg *A : Args->filtered(OPT_UNKNOWN)) {
- Diags.Report(diag::err_drv_unknown_argument) << A->getAsString(*Args);
+ for (const Arg *A : Args.filtered(OPT_UNKNOWN)) {
+ Diags.Report(diag::err_drv_unknown_argument) << A->getAsString(Args);
Success = false;
}
// Construct the invocation.
// Target Options
- Opts.Triple = llvm::Triple::normalize(Args->getLastArgValue(OPT_triple));
- Opts.CPU = Args->getLastArgValue(OPT_target_cpu);
- Opts.Features = Args->getAllArgValues(OPT_target_feature);
+ Opts.Triple = llvm::Triple::normalize(Args.getLastArgValue(OPT_triple));
+ Opts.CPU = Args.getLastArgValue(OPT_target_cpu);
+ Opts.Features = Args.getAllArgValues(OPT_target_feature);
// Use the default target triple if unspecified.
if (Opts.Triple.empty())
Opts.Triple = llvm::sys::getDefaultTargetTriple();
// Language Options
- Opts.IncludePaths = Args->getAllArgValues(OPT_I);
- Opts.NoInitialTextSection = Args->hasArg(OPT_n);
- Opts.SaveTemporaryLabels = Args->hasArg(OPT_msave_temp_labels);
- Opts.GenDwarfForAssembly = Args->hasArg(OPT_g_Flag);
- Opts.CompressDebugSections = Args->hasArg(OPT_compress_debug_sections);
- if (Args->hasArg(OPT_gdwarf_2))
+ Opts.IncludePaths = Args.getAllArgValues(OPT_I);
+ Opts.NoInitialTextSection = Args.hasArg(OPT_n);
+ Opts.SaveTemporaryLabels = Args.hasArg(OPT_msave_temp_labels);
+ Opts.GenDwarfForAssembly = Args.hasArg(OPT_g_Flag);
+ Opts.CompressDebugSections = Args.hasArg(OPT_compress_debug_sections);
+ if (Args.hasArg(OPT_gdwarf_2))
Opts.DwarfVersion = 2;
- if (Args->hasArg(OPT_gdwarf_3))
+ if (Args.hasArg(OPT_gdwarf_3))
Opts.DwarfVersion = 3;
- if (Args->hasArg(OPT_gdwarf_4))
+ if (Args.hasArg(OPT_gdwarf_4))
Opts.DwarfVersion = 4;
- Opts.DwarfDebugFlags = Args->getLastArgValue(OPT_dwarf_debug_flags);
- Opts.DwarfDebugProducer = Args->getLastArgValue(OPT_dwarf_debug_producer);
- Opts.DebugCompilationDir = Args->getLastArgValue(OPT_fdebug_compilation_dir);
- Opts.MainFileName = Args->getLastArgValue(OPT_main_file_name);
+ Opts.DwarfDebugFlags = Args.getLastArgValue(OPT_dwarf_debug_flags);
+ Opts.DwarfDebugProducer = Args.getLastArgValue(OPT_dwarf_debug_producer);
+ Opts.DebugCompilationDir = Args.getLastArgValue(OPT_fdebug_compilation_dir);
+ Opts.MainFileName = Args.getLastArgValue(OPT_main_file_name);
// Frontend Options
- if (Args->hasArg(OPT_INPUT)) {
+ if (Args.hasArg(OPT_INPUT)) {
bool First = true;
- for (arg_iterator it = Args->filtered_begin(OPT_INPUT),
- ie = Args->filtered_end(); it != ie; ++it, First=false) {
+ for (arg_iterator it = Args.filtered_begin(OPT_INPUT),
+ ie = Args.filtered_end();
+ it != ie; ++it, First = false) {
const Arg *A = it;
if (First)
Opts.InputFile = A->getValue();
else {
- Diags.Report(diag::err_drv_unknown_argument) << A->getAsString(*Args);
+ Diags.Report(diag::err_drv_unknown_argument) << A->getAsString(Args);
Success = false;
}
}
}
- Opts.LLVMArgs = Args->getAllArgValues(OPT_mllvm);
- Opts.OutputPath = Args->getLastArgValue(OPT_o);
- if (Arg *A = Args->getLastArg(OPT_filetype)) {
+ Opts.LLVMArgs = Args.getAllArgValues(OPT_mllvm);
+ Opts.OutputPath = Args.getLastArgValue(OPT_o);
+ if (Arg *A = Args.getLastArg(OPT_filetype)) {
StringRef Name = A->getValue();
unsigned OutputType = StringSwitch<unsigned>(Name)
.Case("asm", FT_Asm)
@@ -230,25 +230,24 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
.Case("obj", FT_Obj)
.Default(~0U);
if (OutputType == ~0U) {
- Diags.Report(diag::err_drv_invalid_value)
- << A->getAsString(*Args) << Name;
+ Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;
Success = false;
} else
Opts.OutputType = FileType(OutputType);
}
- Opts.ShowHelp = Args->hasArg(OPT_help);
- Opts.ShowVersion = Args->hasArg(OPT_version);
+ Opts.ShowHelp = Args.hasArg(OPT_help);
+ Opts.ShowVersion = Args.hasArg(OPT_version);
// Transliterate Options
Opts.OutputAsmVariant =
- getLastArgIntValue(*Args.get(), OPT_output_asm_variant, 0, Diags);
- Opts.ShowEncoding = Args->hasArg(OPT_show_encoding);
- Opts.ShowInst = Args->hasArg(OPT_show_inst);
+ getLastArgIntValue(Args, OPT_output_asm_variant, 0, Diags);
+ Opts.ShowEncoding = Args.hasArg(OPT_show_encoding);
+ Opts.ShowInst = Args.hasArg(OPT_show_inst);
// Assemble Options
- Opts.RelaxAll = Args->hasArg(OPT_mrelax_all);
- Opts.NoExecStack = Args->hasArg(OPT_mno_exec_stack);
- Opts.FatalWarnings = Args->hasArg(OPT_massembler_fatal_warnings);
+ Opts.RelaxAll = Args.hasArg(OPT_mrelax_all);
+ Opts.NoExecStack = Args.hasArg(OPT_mno_exec_stack);
+ Opts.FatalWarnings = Args.hasArg(OPT_massembler_fatal_warnings);
return Success;
}
diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp
index ff81b8a..5925447 100644
--- a/tools/driver/driver.cpp
+++ b/tools/driver/driver.cpp
@@ -321,16 +321,16 @@ static void FixupDiagPrefixExeName(TextDiagnosticPrinter *DiagClient,
// This lets us create the DiagnosticsEngine with a properly-filled-out
// DiagnosticOptions instance.
static DiagnosticOptions *
-CreateAndPopulateDiagOpts(SmallVectorImpl<const char *> &argv) {
+CreateAndPopulateDiagOpts(ArrayRef<const char *> argv) {
auto *DiagOpts = new DiagnosticOptions;
std::unique_ptr<OptTable> Opts(createDriverOptTable());
unsigned MissingArgIndex, MissingArgCount;
- std::unique_ptr<InputArgList> Args(Opts->ParseArgs(
- argv.begin() + 1, argv.end(), MissingArgIndex, MissingArgCount));
+ InputArgList Args =
+ Opts->ParseArgs(argv.slice(1), MissingArgIndex, MissingArgCount);
// We ignore MissingArgCount and the return value of ParseDiagnosticArgs.
// Any errors that would be diagnosed here will also be diagnosed later,
// when the DiagnosticsEngine actually exists.
- (void) ParseDiagnosticArgs(*DiagOpts, *Args);
+ (void)ParseDiagnosticArgs(*DiagOpts, Args);
return DiagOpts;
}
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index 2216ec6..bf5b582 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -1880,6 +1880,9 @@ public:
void VisitOMPBarrierDirective(const OMPBarrierDirective *D);
void VisitOMPTaskwaitDirective(const OMPTaskwaitDirective *D);
void VisitOMPTaskgroupDirective(const OMPTaskgroupDirective *D);
+ void
+ VisitOMPCancellationPointDirective(const OMPCancellationPointDirective *D);
+ void VisitOMPCancelDirective(const OMPCancelDirective *D);
void VisitOMPFlushDirective(const OMPFlushDirective *D);
void VisitOMPOrderedDirective(const OMPOrderedDirective *D);
void VisitOMPAtomicDirective(const OMPAtomicDirective *D);
@@ -1934,8 +1937,8 @@ void EnqueueVisitor::AddTypeLoc(TypeSourceInfo *TI) {
}
void EnqueueVisitor::EnqueueChildren(const Stmt *S) {
unsigned size = WL.size();
- for (Stmt::const_child_range Child = S->children(); Child; ++Child) {
- AddStmt(*Child);
+ for (const Stmt *SubStmt : S->children()) {
+ AddStmt(SubStmt);
}
if (size == WL.size())
return;
@@ -2098,6 +2101,9 @@ OMPClauseEnqueue::VisitOMPCopyprivateClause(const OMPCopyprivateClause *C) {
void OMPClauseEnqueue::VisitOMPFlushClause(const OMPFlushClause *C) {
VisitOMPClauseList(C);
}
+void OMPClauseEnqueue::VisitOMPDependClause(const OMPDependClause *C) {
+ VisitOMPClauseList(C);
+}
}
void EnqueueVisitor::EnqueueChildren(const OMPClause *S) {
@@ -2504,6 +2510,15 @@ void EnqueueVisitor::VisitOMPTeamsDirective(const OMPTeamsDirective *D) {
VisitOMPExecutableDirective(D);
}
+void EnqueueVisitor::VisitOMPCancellationPointDirective(
+ const OMPCancellationPointDirective *D) {
+ VisitOMPExecutableDirective(D);
+}
+
+void EnqueueVisitor::VisitOMPCancelDirective(const OMPCancelDirective *D) {
+ VisitOMPExecutableDirective(D);
+}
+
void CursorVisitor::EnqueueWorkList(VisitorWorkList &WL, const Stmt *S) {
EnqueueVisitor(WL, MakeCXCursor(S, StmtParent, TU,RegionOfInterest)).Visit(S);
}
@@ -3827,12 +3842,11 @@ CXString clang_Cursor_getMangling(CXCursor C) {
// Now apply backend mangling.
std::unique_ptr<llvm::DataLayout> DL(
new llvm::DataLayout(Ctx.getTargetInfo().getTargetDescription()));
- llvm::Mangler BackendMangler(DL.get());
std::string FinalBuf;
llvm::raw_string_ostream FinalBufOS(FinalBuf);
- BackendMangler.getNameWithPrefix(FinalBufOS,
- llvm::Twine(FrontendBufOS.str()));
+ llvm::Mangler::getNameWithPrefix(FinalBufOS, llvm::Twine(FrontendBufOS.str()),
+ *DL);
return cxstring::createDup(FinalBufOS.str());
}
@@ -4281,6 +4295,10 @@ CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) {
return cxstring::createRef("OMPTargetDirective");
case CXCursor_OMPTeamsDirective:
return cxstring::createRef("OMPTeamsDirective");
+ case CXCursor_OMPCancellationPointDirective:
+ return cxstring::createRef("OMPCancellationPointDirective");
+ case CXCursor_OMPCancelDirective:
+ return cxstring::createRef("OMPCancelDirective");
case CXCursor_OverloadCandidate:
return cxstring::createRef("OverloadCandidate");
}
diff --git a/tools/libclang/CXCursor.cpp b/tools/libclang/CXCursor.cpp
index b8bb28e..fe9ba4e 100644
--- a/tools/libclang/CXCursor.cpp
+++ b/tools/libclang/CXCursor.cpp
@@ -588,6 +588,12 @@ CXCursor cxcursor::MakeCXCursor(const Stmt *S, const Decl *Parent,
case Stmt::OMPTeamsDirectiveClass:
K = CXCursor_OMPTeamsDirective;
break;
+ case Stmt::OMPCancellationPointDirectiveClass:
+ K = CXCursor_OMPCancellationPointDirective;
+ break;
+ case Stmt::OMPCancelDirectiveClass:
+ K = CXCursor_OMPCancelDirective;
+ break;
}
CXCursor C = { K, 0, { Parent, S, TU } };
diff --git a/tools/scan-build/ccc-analyzer b/tools/scan-build/ccc-analyzer
index ffe6859..14591ae 100755
--- a/tools/scan-build/ccc-analyzer
+++ b/tools/scan-build/ccc-analyzer
@@ -22,6 +22,33 @@ use File::Basename;
use Text::ParseWords;
##===----------------------------------------------------------------------===##
+# List form 'system' with STDOUT and STDERR captured.
+##===----------------------------------------------------------------------===##
+
+sub silent_system {
+ my $HtmlDir = shift;
+ my $Command = shift;
+
+ # Save STDOUT and STDERR and redirect to a temporary file.
+ open OLDOUT, ">&", \*STDOUT;
+ open OLDERR, ">&", \*STDERR;
+ my ($TmpFH, $TmpFile) = tempfile("temp_buf_XXXXXX",
+ DIR => $HtmlDir,
+ UNLINK => 1);
+ open(STDOUT, ">$TmpFile");
+ open(STDERR, ">&", \*STDOUT);
+
+ # Invoke 'system', STDOUT and STDERR are output to a temporary file.
+ system $Command, @_;
+
+ # Restore STDOUT and STDERR.
+ open STDOUT, ">&", \*OLDOUT;
+ open STDERR, ">&", \*OLDERR;
+
+ return $TmpFH;
+}
+
+##===----------------------------------------------------------------------===##
# Compiler command setup.
##===----------------------------------------------------------------------===##
@@ -145,7 +172,7 @@ sub ProcessClangFailure {
print OUT "@$Args\n";
close OUT;
`uname -a >> $PPFile.info.txt 2>&1`;
- `$Compiler -v >> $PPFile.info.txt 2>&1`;
+ `"$Compiler" -v >> $PPFile.info.txt 2>&1`;
rename($ofile, "$PPFile.stderr.txt");
return (basename $PPFile);
}
@@ -155,27 +182,15 @@ sub ProcessClangFailure {
##----------------------------------------------------------------------------##
sub GetCCArgs {
+ my $HtmlDir = shift;
my $mode = shift;
my $Args = shift;
-
- pipe (FROM_CHILD, TO_PARENT);
- my $pid = fork();
- if ($pid == 0) {
- close FROM_CHILD;
- open(STDOUT,">&", \*TO_PARENT);
- open(STDERR,">&", \*TO_PARENT);
- exec $Clang, "-###", $mode, @$Args;
- }
- close(TO_PARENT);
my $line;
- while (<FROM_CHILD>) {
+ my $OutputStream = silent_system($HtmlDir, $Clang, "-###", $mode, @$Args);
+ while (<$OutputStream>) {
next if (!/\s"?-cc1"?\s/);
$line = $_;
}
-
- waitpid($pid,0);
- close(FROM_CHILD);
-
die "could not find clang line\n" if (!defined $line);
# Strip leading and trailing whitespace characters.
$line =~ s/^\s+|\s+$//g;
@@ -207,7 +222,7 @@ sub Analyze {
$Cmd = $Clang;
# Create arguments for doing regular parsing.
- my $SyntaxArgs = GetCCArgs("-fsyntax-only", \@Args);
+ my $SyntaxArgs = GetCCArgs($HtmlDir, "-fsyntax-only", \@Args);
@CmdArgsSansAnalyses = @$SyntaxArgs;
# Create arguments for doing static analysis.
@@ -230,7 +245,7 @@ sub Analyze {
push @Args, "-Xclang", "-analyzer-viz-egraph-ubigraph";
}
- my $AnalysisArgs = GetCCArgs("--analyze", \@Args);
+ my $AnalysisArgs = GetCCArgs($HtmlDir, "--analyze", \@Args);
@CmdArgs = @$AnalysisArgs;
}
@@ -255,31 +270,19 @@ sub Analyze {
print STDERR "#SHELL (cd '$dir' && @PrintArgs)\n";
}
- # Capture the STDERR of clang and send it to a temporary file.
- # Capture the STDOUT of clang and reroute it to ccc-analyzer's STDERR.
+ # Save STDOUT and STDERR of clang to a temporary file and reroute
+ # all clang output to ccc-analyzer's STDERR.
# We save the output file in the 'crashes' directory if clang encounters
# any problems with the file.
- pipe (FROM_CHILD, TO_PARENT);
- my $pid = fork();
- if ($pid == 0) {
- close FROM_CHILD;
- open(STDOUT,">&", \*TO_PARENT);
- open(STDERR,">&", \*TO_PARENT);
- exec $Cmd, @CmdArgs;
- }
-
- close TO_PARENT;
my ($ofh, $ofile) = tempfile("clang_output_XXXXXX", DIR => $HtmlDir);
-
- while (<FROM_CHILD>) {
+
+ my $OutputStream = silent_system($HtmlDir, $Cmd, @CmdArgs);
+ while ( <$OutputStream> ) {
print $ofh $_;
print STDERR $_;
}
- close $ofh;
-
- waitpid($pid,0);
- close(FROM_CHILD);
my $Result = $?;
+ close $ofh;
# Did the command die because of a signal?
if ($ReportFailures) {
diff --git a/tools/scan-build/scan-build b/tools/scan-build/scan-build
index ac8e22e..d7cadc3 100755
--- a/tools/scan-build/scan-build
+++ b/tools/scan-build/scan-build
@@ -1232,16 +1232,9 @@ ENDTEXT
}
my %EnabledCheckers;
foreach my $lang ("c", "objective-c", "objective-c++", "c++") {
- pipe(FROM_CHILD, TO_PARENT);
- my $pid = fork();
- if ($pid == 0) {
- close FROM_CHILD;
- open(STDOUT,">&", \*TO_PARENT);
- open(STDERR,">&", \*TO_PARENT);
- exec $Clang, ( @PluginLoadCommandline_xclang, '--analyze', '-x', $lang, '-', '-###');
- }
- close(TO_PARENT);
- while(<FROM_CHILD>) {
+ my $ExecLine = join(' ', qq/"$Clang"/, @PluginLoadCommandline_xclang, "--analyze", "-x", $lang, "-", "-###", "2>&1", "|");
+ open(PS, $ExecLine);
+ while (<PS>) {
foreach my $val (split /\s+/) {
$val =~ s/\"//g;
if ($val =~ /-analyzer-checker\=([^\s]+)/) {
@@ -1249,23 +1242,14 @@ ENDTEXT
}
}
}
- waitpid($pid,0);
- close(FROM_CHILD);
}
# Query clang for complete list of checkers.
if (defined $Clang && -x $Clang) {
- pipe(FROM_CHILD, TO_PARENT);
- my $pid = fork();
- if ($pid == 0) {
- close FROM_CHILD;
- open(STDOUT,">&", \*TO_PARENT);
- open(STDERR,">&", \*TO_PARENT);
- exec $Clang, ('-cc1', @PluginsToLoad , '-analyzer-checker-help');
- }
- close(TO_PARENT);
+ my $ExecLine = join(' ', qq/"$Clang"/, "-cc1", @PluginsToLoad, "-analyzer-checker-help", "2>&1", "|");
+ open(PS, $ExecLine);
my $foundCheckers = 0;
- while(<FROM_CHILD>) {
+ while (<PS>) {
if (/CHECKERS:/) {
$foundCheckers = 1;
last;
@@ -1277,7 +1261,7 @@ ENDTEXT
else {
print("\nAVAILABLE CHECKERS:\n\n");
my $skip = 0;
- while(<FROM_CHILD>) {
+ while(<PS>) {
if (/experimental/) {
$skip = 1;
next;
@@ -1314,10 +1298,9 @@ ENDTEXT
}
print $_;
}
- print "\nNOTE: \"+\" indicates that an analysis is enabled by default.\n"
+ print "\nNOTE: \"+\" indicates that an analysis is enabled by default.\n";
}
- waitpid($pid,0);
- close(FROM_CHILD);
+ close PS;
}
print <<ENDTEXT
OpenPOWER on IntegriCloud