Skip to content

Commit

Permalink
Reland "[CUDA][HIP] Use the same default language std as C++""
Browse files Browse the repository at this point in the history
Reland after fixing regression in lldb.

Differential Revision: https://reviews.llvm.org/D155539
  • Loading branch information
yxsamliu committed Jul 20, 2023
1 parent 9265f7c commit 8ef0448
Show file tree
Hide file tree
Showing 7 changed files with 19 additions and 24 deletions.
3 changes: 3 additions & 0 deletions clang/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -886,6 +886,9 @@ RISC-V Support

CUDA/HIP Language Changes
^^^^^^^^^^^^^^^^^^^^^^^^^
- Clang has been updated to align its default language standard for CUDA/HIP with
that of C++. The standard has now been enhanced to gnu++17, supplanting the
previously used c++14.

CUDA Support
^^^^^^^^^^^^
Expand Down
8 changes: 0 additions & 8 deletions clang/include/clang/Basic/LangStandards.def
Original file line number Diff line number Diff line change
Expand Up @@ -214,14 +214,6 @@ LANGSTANDARD_ALIAS_DEPR(openclcpp10, "CLC++")
LANGSTANDARD_ALIAS_DEPR(openclcpp10, "CLC++1.0")
LANGSTANDARD_ALIAS_DEPR(openclcpp2021, "CLC++2021")

// CUDA
LANGSTANDARD(cuda, "cuda", CUDA, "NVIDIA CUDA(tm)",
LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs)

// HIP
LANGSTANDARD(hip, "hip", HIP, "HIP",
LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs)

// HLSL
LANGSTANDARD(hlsl, "hlsl",
HLSL, "High Level Shader Language",
Expand Down
6 changes: 2 additions & 4 deletions clang/lib/Basic/LangStandards.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,6 @@ LangStandard::Kind clang::getDefaultLanguageStandard(clang::Language Lang,
return LangStandard::lang_opencl12;
case Language::OpenCLCXX:
return LangStandard::lang_openclcpp10;
case Language::CUDA:
return LangStandard::lang_cuda;
case Language::Asm:
case Language::C:
// The PS4 uses C99 as the default C standard.
Expand All @@ -66,13 +64,13 @@ LangStandard::Kind clang::getDefaultLanguageStandard(clang::Language Lang,
return LangStandard::lang_gnu11;
case Language::CXX:
case Language::ObjCXX:
case Language::CUDA:
case Language::HIP:
if (T.isPS())
return LangStandard::lang_gnucxx14;
return LangStandard::lang_gnucxx17;
case Language::RenderScript:
return LangStandard::lang_c99;
case Language::HIP:
return LangStandard::lang_hip;
case Language::HLSL:
return LangStandard::lang_hlsl2021;
}
Expand Down
2 changes: 1 addition & 1 deletion clang/test/CodeGenCUDA/long-double.cu
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// RUN: -aux-triple x86_64-unknown-gnu-linux -fcuda-is-device \
// RUN: -emit-llvm -o - %s 2>&1 | FileCheck %s

// CHECK: @_ZN15infinity_helperIeE5valueE = {{.*}} double 0x47EFFFFFD586B834, align 8
// CHECK: @_ZN15infinity_helperIeE5valueE = {{.*}} double 0x47EFFFFFD586B834,{{.*}} align 8
// CHECK: @size = {{.*}} i32 8

#include "Inputs/cuda.h"
Expand Down
6 changes: 4 additions & 2 deletions clang/test/Driver/unknown-std.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@

// RUN: not %clang %s -std=foobar -c 2>&1 | FileCheck --match-full-lines %s
// RUN: not %clang -x objective-c++ %s -std=foobar -c 2>&1 | FileCheck --match-full-lines %s
// RUN: not %clang -x cuda -nocudainc -nocudalib --cuda-path=%S/Inputs/CUDA/usr/local/cuda %s -std=foobar -c 2>&1 | FileCheck --match-full-lines --check-prefix=CHECK --check-prefix=CUDA %s
// RUN: not %clang -x cuda -nocudainc -nocudalib --cuda-path=%S/Inputs/CUDA/usr/local/cuda \
// RUN: %s -std=foobar -c 2>&1 | FileCheck --match-full-lines %s
// RUN: not %clang -x hip -nocudainc -nocudalib %s -std=foobar -c 2>&1 \
// RUN: | FileCheck --match-full-lines %s

// CHECK: error: invalid value 'foobar' in '-std=foobar'
// CHECK-NEXT: note: use 'c++98' or 'c++03' for 'ISO C++ 1998 with amendments' standard
Expand All @@ -21,7 +24,6 @@
// CHECK-NEXT: note: use 'gnu++23' for 'ISO C++ 2023 DIS with GNU extensions' standard
// CHECK-NEXT: note: use 'c++2c' or 'c++26' for 'Working draft for C++2c' standard
// CHECK-NEXT: note: use 'gnu++2c' or 'gnu++26' for 'Working draft for C++2c with GNU extensions' standard
// CUDA-NEXT: note: use 'cuda' for 'NVIDIA CUDA(tm)' standard

// Make sure that no other output is present.
// CHECK-NOT: {{^.+$}}
Expand Down
12 changes: 7 additions & 5 deletions clang/test/Preprocessor/lang-std.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
// UNSUPPORTED: target={{.*-(ps4|ps5)}}
/// Test default standards.
/// PS4/PS5 default to gnu++14.
/// CUDA/HIP uses the same default standards as C++.

// RUN: %clang_cc1 -dM -E %s | FileCheck --check-prefix=CXX17 %s
// RUN: %clang_cc1 -dM -E -x cuda %s | FileCheck --check-prefix=CXX14 %s
// RUN: %clang_cc1 -dM -E -x hip %s | FileCheck --check-prefix=CXX14 %s
// RUN: %clang_cc1 -dM -E %s | grep __cplusplus >%T-cpp-std.txt
// RUN: %clang_cc1 -dM -E -x cuda %s | grep __cplusplus >%T-cuda-cuda.txt
// RUN: %clang_cc1 -dM -E -x hip %s | grep __cplusplus >%T-hip-std.txt
// RUN: diff %T-cpp-std.txt %T-cuda-cuda.txt
// RUN: diff %T-cpp-std.txt %T-hip-std.txt

// RUN: %clang_cc1 -dM -E -x cuda -std=c++14 %s | FileCheck --check-prefix=CXX14 %s
// RUN: %clang_cc1 -dM -E -x cuda -std=c++17 %s | FileCheck --check-prefix=CXX17 %s
// RUN: %clang_cc1 -dM -E -x hip -std=c++98 %s | FileCheck --check-prefix=CXX98 %s

// CXX98: #define __cplusplus 199711L
Expand Down
6 changes: 2 additions & 4 deletions lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -485,9 +485,6 @@ static void ParseLangArgs(LangOptions &Opts, InputKind IK, const char *triple) {
case clang::Language::OpenCLCXX:
LangStd = LangStandard::lang_openclcpp10;
break;
case clang::Language::CUDA:
LangStd = LangStandard::lang_cuda;
break;
case clang::Language::Asm:
case clang::Language::C:
case clang::Language::ObjC:
Expand All @@ -497,8 +494,9 @@ static void ParseLangArgs(LangOptions &Opts, InputKind IK, const char *triple) {
case clang::Language::ObjCXX:
LangStd = LangStandard::lang_gnucxx98;
break;
case clang::Language::CUDA:
case clang::Language::HIP:
LangStd = LangStandard::lang_hip;
LangStd = LangStandard::lang_gnucxx17;
break;
case clang::Language::HLSL:
LangStd = LangStandard::lang_hlsl;
Expand Down

0 comments on commit 8ef0448

Please sign in to comment.